Доступ к элементам списка R через параметры функции - PullRequest
3 голосов
/ 05 июня 2011

У меня есть список R, который выглядит следующим образом

> str(prices)
List of 4
 $ ID   : int 102894616
 $ delay: int 8
 $ 47973      :List of 12
  ..$ id       : int 47973
  ..$ index        : int 2
  ..$ matched: num 5817
 $ 47972      :List of 12
..

Очевидно, я могу получить доступ к любому элементу, например, Цены на $ "47973" $ ID.

Однако, как бы я написал функцию, которая параметризует доступ к этому списку? Например, функция доступа с подписью:

access <- function(index1, index2) { .. }

Что можно использовать следующим образом:

> access("47973", "matched")
5817

Это кажется очень тривиальным, но я не могу написать такую ​​функцию. Спасибо за любые указатели.

Ответы [ 2 ]

4 голосов
/ 05 июня 2011

Использование '[[' вместо '$', кажется, работает:

prices <- list(
    `47973` = list( id = 1, matched = 2))

access <- function(index1, index2) prices[[index1]][[index2]]
access("47973","matched")

Что касается того, почему это работает вместо: access <- function(index1, index2) prices$index1$index2 (что, как я полагаю, вы пытались?), Этопотому что здесь index1 и index2 не оцениваются.То есть он ищет в списке элемент с именем index1 вместо того, к чему этот объект относится.

3 голосов
/ 06 июня 2011

Вы можете воспользоваться тем, что [[ принимает вектор, используемый рекурсивно:

prices <- list(
    `47973` = list( id = 1, matched = 2))

prices[[c("47973", "matched")]]
# 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...