Получение Атомарных Ошибок Со Списками

#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. Как насчет границ