通过函数参数访问R列表元素

时间:2011-06-05 11:25:15

标签: list r syntax

我有一个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 个答案:

答案 0 :(得分:4)

使用'[['代替'$'似乎有效:

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(我假设你尝试过的是什么?)因为这里index1index2未被评估。也就是说,它在列表中搜索名为index1的元素,而不是此对象评估的内容。

答案 1 :(得分:3)

您可以利用[[接受向量的事实,递归使用:

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

prices[[c("47973", "matched")]]
# 2