#r
Вопрос:
Я реализую алгоритм A-star в R и продолжаю получать «Ошибку во время обертывания: оператор $ недопустим для атомарных векторов» при попытке использовать функцию sapply.
Это моя структура:
frontier <- list()
starting_node = list(1, 1)
frontier <- append(frontier, list(node = starting_node, cost = 0, path = list()))
costs = sapply(frontier,function(item)item$cost)
Это возвращает ошибку. У кого-нибудь есть какие-либо идеи о том, что вызывает эту проблему? Мне кажется, что я использую списки, для которых операция $ должна быть в порядке?
Ответ №1:
Элемент стоимости границы вашего списка на самом деле имеет атомарный тип numeric, для которого оператор $ не определен:
library(tidyverse)
frontier <- list()
starting_node = list(1, 1)
frontier <- append(frontier, list(node = starting_node, cost = 0, path = list()))
frontier %>% sapply(class)
#> node cost path
#> "list" "numeric" "list"
Создано 2021-09-09 пакетом reprex (v2.0.1)
sapply
применяет функцию с использованием $ к каждому элементу, поэтому каждый элемент должен быть самим списком.
Комментарии:
1. Есть ли какой-нибудь простой способ обойти это?
2. Ты просто хочешь этим заняться
frontier$cost
? Зачем использоватьsapply
?3. Мне нужно вернуть затраты в виде списка, так как я хочу использовать функцию which.min(затраты) в нем, чтобы найти, по какому индексу наименьшая стоимость находится в границе списка.
4. Как насчет границ