首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“test[test$A ==”、“A”]和‘test$A[test$A ==“]的区别

“test[test$A ==”、“A”]和‘test$A[test$A ==“]的区别
EN

Stack Overflow用户
提问于 2014-07-09 10:32:15
回答 2查看 95关注 0票数 1

我一直认为他们是一样的,想想:

代码语言:javascript
复制
test <- data.frame(A = c(NA, ""), stringsAsFactors = F)
test[test$A == "", "A"]
## [1] NA ""
test$A[test$A == ""] 
## [1] NA ""
class(test[test$A == "", "A"])
## [1] "character"
class(test$A[test$A == ""])
## [1] "character"

到目前为止还不错,但是在做任务的时候

代码语言:javascript
复制
test[test$A == "", "A"] <- "Unknown" # Doesn't work    
#Error in `[<-.data.frame`(`*tmp*`, test$A == "", "A", value = "Unknown") : missing values are not allowed in subscripted assignments of data frames

test$A[test$A == ""] <- "Unknown" # Works perfectly

test$A[test$A == ""]似乎以某种方式忽略了NA,而test[test$A == "", "A"]却无法这样做。

为了更好地说明这一点,如果我有一个仅包含NA的数据集,test$A[test$A == ""] <- "Unknown"仍然不会返回错误,只是不会更改任何内容:

代码语言:javascript
复制
test <- data.frame(A = NA, stringsAsFactors = F)
test$A[test$A == ""] <- "Unknown"
test
##     A
## 1 <NA>

?"["文档来看,(如果我正确理解的话)它应该可以工作。

在替换(即在分配的lhs上使用索引)时,NA不选择要替换的任何元素。由于是否应该使用rhs的元素存在模糊性,因此只有当rhs值为1(因此这两种解释将具有相同的结果)时,才允许使用rhs值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-09 12:02:59

我怀疑正在发生的事情与操作符优先级http://stat.ethz.ch/R-manual/R-patched/library/base/html/Syntax.html有关。$作为运算符先于[

首先在第二示例中执行组件选择,然后对向量进行赋值。在第一个示例中,首先分配给一个data.frame。data.frame赋值方法有额外的检查,从而导致错误。

还有within an expression operators of equal precedence are evaluated from left to right except where indicated (注意,这=不一定是一个运算符)。

二进制运算符:::::$@在右侧需要名称或字符串常量,而前两个操作符也要求它们位于左侧。所以,例如

代码语言:javascript
复制
> test[['A']][test$A == ""] <- "Unknown" 
> test
        A
1    <NA>
2 Unknown

给出的结果与test$A[test$A == ""] <- "Unknown"相同,即使你、[[[也有同样的优先权。

票数 2
EN

Stack Overflow用户

发布于 2014-07-09 11:00:24

正如你文章末尾的抄袭文本所暗示的那样,避免NAs b/o歧义(即使它有效,至少在任何情况下,这似乎很难理解和容易出错)。尝试显式地处理(排除) NAs,例如通过

test[(!is.na(test$A == "")) & (test$A == ""), "A"] <- "Unknown" # Does work :-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24651298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档