如何在R中直接调用$函数结合变量名提取列表元素?
在R中直接调用
$函数结合变量提取列表元素的方法 先定义示例列表:
example_list <- list(x = 1, y = 2, z = 3)
提取这个列表的元素有多种常规方式,比如example_list$x或者example_list[["x"]]都能正常获取对应值。也可以直接调用$函数来提取元素,写法如下:
`$`(example_list, "x")
但如果想用变量传递元素名时,直接调用$函数会失效:
bork <- "x" `$`(example_list, bork) ## 返回NULL `$`(example_list, eval(bork)) ## 返回错误:invalid subscript type 'language'
解决方法
这是因为$函数的第二个参数采用非标准求值逻辑,它不会解析传入的变量,而是直接把变量名当作元素名去查找。要让变量被正确解析,有两种可行方式:
- 用
get()函数解析变量后传入
bork <- "x" `$`(example_list, get(bork))
get(bork)会先把变量bork解析成字符串"x",再传递给$函数,就能正确匹配元素。
- 用
do.call()调用$函数
bork <- "x" do.call(`$`, list(example_list, bork))
do.call()会将第二个参数列表里的元素作为参数传递给$函数,这里bork会被解析为实际值"x",从而完成元素提取。
另外提一句:如果没有必须用$函数的要求,更推荐用[[索引,它本身就支持变量传递,写法更简洁:
bork <- "x" example_list[[bork]]
内容的提问来源于stack exchange,提问作者docjay
相关产品推荐
相关产品推荐

