【发布时间】:2017-01-24 14:48:53
【问题描述】:
从 data.frame 中删除列时,我遇到了一个奇怪的行为。最初我有:
> a <- data.frame("a" = c(1,2,3), "abc" = c(3,2,1)); print(a)
a abc
1 1 3
2 2 2
3 3 1
现在,我从 data.frame 中删除 a$a
> a$a <- NULL; print(a)
abc
1 3
2 2
3 1
正如预期的那样,我的 data.frame 中只有 abc 列。但是奇怪的部分开始了,当我尝试引用已删除的列a。
> print(a$a)
[1] 3 2 1
> print(is.null(a$a))
[1] FALSE
看起来 R 返回的值是 a$abc 而不是 NULL。
当剩余列的名称的开头与已删除列的名称完全匹配时会发生这种情况。
这是一个错误还是我在这里遗漏了什么?
【问题讨论】:
-
你是正确的@Chase,虽然问题的标题不是最好的搜索。
-
@lselzer - 我当然同意。我只知道它存在,因为我回答了它。 JD修复了这个问题,我会相应地更新另一个问题。或者他们应该被合并......或者什么。
-
这只是 R 试图变得聪明并猜测你的意思。它认为
a$a表示a$abc,因为这是唯一可能的选择。这不适用于a <- data.frame("a" = c(1,2,3), "b" = c(3,2,1)); a$a <- NULL ; is.null(a$a)。在这种情况下,它只是偶然起作用,因为两列都以a开头。 -
正如
help("$")解释的那样,$进行部分匹配。