为什么没有$" columnname"在一个功能工作?

时间:2015-09-19 04:08:02

标签: r

为什么我不能在函数中使用df$"columnname"检索列,当它在一个函数之外完全正常工作时?

使用数据框:

> df <- as.data.frame(cbind(col1=c(0,1), col2=c(2,3)))
> df
     col1 col2
[1,]    0    2
[2,]    1    3

df$"col1"正常工作正常。但是,当我把它放在一个函数中时,它会返回NULL。

> df_fn <- function(name) { df$name }
> df_fn("col1")
NULL

然而,当我使用[[]]形式时,它完全正常:

> df_fn2 <- function(name) { df[[name]] }
> df_fn2("col1")
[1] 0 1

环顾四周,并没有看到任何答案(尽管很难尝试搜索像$这样的符号)。实际上,我可以很好地使用[[]]表格,但我很好奇R内部的内容会导致这种情况。

1 个答案:

答案 0 :(得分:3)

根据jeremycg的评论查看?"$"文档:

x$name is equivalent to x[["name", exact = FALSE]]

只需输入df$"col1"即可。在df_fn("name")中输入内容时,它不起作用,因为根据文档,它真的试图将"name"作为列查找。这里的证明:

> df <- as.data.frame(cbind(col1=c(0,1), col2=c(2,3), name=c(4,5)))
> df_fn("name")
[1] 4 5