为什么我不能在函数中使用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内部的内容会导致这种情况。
答案 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