我有以下 list
test_list=list(list(a=1,b=2),list(a=3,b=4))
我想提取所有具有列表元素名称的元素
a
.我可以通过
sapply(test_list,`[[`,"a")
这给了我正确的结果
#[1] 1 3
当我用 Rs 美元运算符尝试相同时
$
, 我得到 NULL
sapply(test_list,`$`,"a")
#[[1]]
#NULL
#
#[[2]]
#NULL
但是,如果我在
test_list
的单个元素上使用它它按预期工作`$`(test_list[[1]],"a")
#[1] 1
我在这里遗漏了一些明显的东西吗?
最佳答案
据我所知,这是两件事的结合。
一、the second element of $
is matched but not evaluated so it cannot be a variable .
其次,当参数传递给函数时,它们被分配给函数调用中的相应变量。当传递给 sapply
"a"
分配给一个变量,因此将不再使用 $
.我们可以通过运行来看到这一点
sapply("a", print)
[1] "a"
a
"a"
这可能会导致这样的特殊结果
sapply(test_list, function(x, a) {`$`(x, a)})
[1] 1 3
哪里尽管
a
是一个变量(甚至还没有被赋值)$
将其与列表中元素的名称相匹配。
关于r - 美元运算符作为 sapply 的函数参数未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34544888/