r - 美元运算符作为 sapply 的函数参数未按预期工作

标签 r lapply sapply dollar-sign

我有以下 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/

相关文章:

r - 为什么我不能使用 R 中的应用函数将 .rda 文件加载到 R 工作区中?

r - 使用 R 获取总和为 100 的所有组合

r - 安装 R 包时无法打开压缩文件

r - Lapply to all columns in a data.frame 除了一个并替换R中的数据

r - 从 R 中的函数在数据框中创建新列

r - 使用 lapply/sapply 创建单级列表,无需强制

r - 从循环逐步回归写入表的问题

RStudio 全局设置(选项)导出/导入

r - 如何替换列表中所有元素的特定值

r - 对 data.frames 列表中的元素求和