我有一个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
这看起来非常简单,但我没有写出这样的功能。谢谢你的任何指示。
答案 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
(我假设你尝试过的是什么?)因为这里index1
和index2
未被评估。也就是说,它在列表中搜索名为index1
的元素,而不是此对象评估的内容。
答案 1 :(得分:3)
您可以利用[[
接受向量的事实,递归使用:
prices <- list(
`47973` = list( id = 1, matched = 2))
prices[[c("47973", "matched")]]
# 2