我在R中有一些非直观的行为。
根据文件
&安培;和&&表示逻辑AND和|和||表示逻辑OR。该 较短的形式执行元素比较与大致相同 算术运算符。较长的表单从左到右进行评估 仅检查每个向量的第一个元素。评估进行 直到确定结果。较长的形式是合适的 用于编程控制流程,通常在if子句中使用。
作为R的新手,这还没有触发应该发生的事情的完整心智模型,但它听起来类似于'和' vs && 39;有条件的和'在其他编程语言中看到(也称为Short-Circuiting Logical Operators)
创建数据框:
mhbins <- data.frame(val=seq(0,10),bin=rep(c(NA),length.out=11))
val bin
1 0 NA
2 1 NA
3 2 NA
4 3 NA
5 4 NA
6 5 NA
7 6 NA
8 7 NA
9 8 NA
10 9 NA
11 10 NA
然后修补它:
mhbins$bin[1 <= mhbins$val & mhbins$val <= 7] <- "some"
val bin
1 0 <NA>
2 1 some
3 2 some
4 3 some
5 4 some
6 5 some
7 6 some
8 7 some
9 8 <NA>
10 9 <NA>
11 10 <NA>
这是预期的(请注意NA
值的打印输出表单会发生变化。评论者Tensibai解释说:&#34; NA
是&#34;数字&#34 ; NA,<NA>
是字符1,因为矢量(df列是)只能是一种类型,当你输入一个字符值时,它会被强制转换为字符,这就是为什么NA表示更改。&#34;)
但是,使用&&
,修补程序操作会减少到NA
:
mhbins <- data.frame(val=seq(0,10),bin=rep(c(NA),length.out=11))
val bin
1 0 NA
2 1 NA
3 2 NA
4 3 NA
5 4 NA
6 5 NA
7 6 NA
8 7 NA
9 8 NA
10 9 NA
11 10 NA
mhbins$bin[1 <= mhbins$val && mhbins$val <= 7] <- "some"
val bin
1 0 <NA>
2 1 <NA>
3 2 <NA>
4 3 <NA>
5 4 <NA>
6 5 <NA>
7 6 <NA>
8 7 <NA>
9 8 <NA>
10 9 <NA>
11 10 <NA>
我不明白这里发生了什么。
答案 0 :(得分:1)
&#39;&amp;&#39;这里返回一个向量,它是&#39;和&#39;每对1 <= mhbins$val
和mhbins$val <= 7
之间的运算符
虽然&#39;&amp;&amp;&#39;仅查看第一对1 <= mhbins$val
和mhbins$val <= 7
实施例
c(TRUE,TRUE) & c(FALSE,TRUE) `returns <[1] FALSE TRUE>`
c(TRUE,TRUE) && c(FALSE,TRUE) `returns <[1] FALSE>`