R中的Data.frames:名称自动完成?

时间:2015-09-29 22:17:14

标签: r dataframe

对不起,如果这是微不足道的。我在R中看到以下行为:

> myDF <- data.frame(Score=5, scoreScaled=1)
> myDF$score ## forgot that the Score variable was capitalized
[1] 1

预期结果:返回NULL(甚至更好:抛出错误)。

我已搜索过此内容,但无法找到有关此行为的任何讨论。是否有人能够就此提供任何参考,为什么要这样做的理由以及是否有任何方法可以防止这种情况?一般来说,我会喜欢一个版本的R,它的变量有点严格,但似乎永远不会发生...

2 个答案:

答案 0 :(得分:5)

$运算符只需要数据框名称的第一个唯一部分来索引它。例如:

> d <- data.frame(score=1, scotch=2)
> d$sco
NULL
> d$scor
[1] 1

避免此行为的一种方法是使用[[]]运算符,其行为如下:

> d <- data.frame(score=1, scotch=2)
> d[['scor']]
NULL
> d[['score']]
[1] 1

我希望这很有帮助。

干杯!

答案 1 :(得分:0)

如果找不到名称,使用 [,""] 而不是 $ 会引发错误。

myDF$score
#[1] 1

myDF[,"score"]
#Error in `[.data.frame`(myDF, , "score") : undefined columns selected
myDF[,"Score"]
#[1] 5

myDF[,"score", drop=TRUE] #More explicit and will also work with tibble::as_tibble
#Error in `[.data.frame`(myDF, , "score", drop = TRUE) : 
#  undefined columns selected
myDF[,"Score", drop=TRUE]
#[1] 5

as.data.frame(myDF)[,"score"] #Will work also with tibble::as_tibble and data.table::as.data.table
#Error in `[.data.frame`(as.data.frame(myDF), , "score") : 
#  undefined columns selected
as.data.frame(myDF)[,"Score"]
#[1] 5

unlist(myDF[,"score"], use.names = FALSE) #Will work also with tibble::as_tibble and data.table::as.data.table
#Error in `[.data.frame`(myDF, , "score") : undefined columns selected
unlist(myDF[,"Score"], use.names = FALSE)
#[1] 5