&引用&&引用;及&&&引用;在R中表现非常不同
我在R有一些非直觉的行为 根据文件 &and&&表示逻辑and,|和| |表示逻辑OR。这个 shorter form执行元素级比较的方式与 算术运算符。较长的表单从左到右求值 只检查每个向量的第一个元素。评估进展 直到结果确定为止。较长的表格是合适的 用于编程控制流,通常在if子句中首选 作为R的新手,这还没有触发一个关于应该发生什么的完整的心智模型,但它听起来类似于在其他编程语言(也称为)中看到的“and”和“vs”条件and 创建数据帧:&引用&&引用;及&&&引用;在R中表现非常不同,r,R,我在R有一些非直觉的行为 根据文件 &and&&表示逻辑and,|和| |表示逻辑OR。这个 shorter form执行元素级比较的方式与 算术运算符。较长的表单从左到右求值 只检查每个向量的第一个元素。评估进展 直到结果确定为止。较长的表格是合适的 用于编程控制流,通常在if子句中首选 作为R的新手,这还没有触发一个关于应该发生什么的完整的心智模型,但它听起来类似于在其他编程语言(也称为)中看到的“and”和“vs”条件and 创建数据帧: mhbins <- data.frame(v
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
我不明白这里发生了什么。这里的“&”返回一个向量,它是每对
1NA
之间的“and”运算符是“数值”NA,
是字符,因为向量(df列)只能是一种类型,当您输入一个字符值时,它会被强制为字符,这就是NA表示形式改变的原因。@Tensibai谢谢您,我将在问题中插入您的评论。最后,这个问题不是关于&vs&&的,这在复制链接中得到了很好的回答,而是关于“R认为它在做什么”,当然mhbins$bin[1 TBH除非您需要一些需要因子作为输入或达到内存限制的基于类别的函数,否则为了便于编码,请避免使用这些函数,直到您对矢量方法更熟悉为止,矢量方法在SQL中或多或少是一种基于选择的计算。请考虑处理整列表,而不是以逐行为目标。好的,请稍候。leaving out&
vs&
。因此mhbins$bin[1
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>
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>
c(TRUE,TRUE) & c(FALSE,TRUE) `returns <[1] FALSE TRUE>`
c(TRUE,TRUE) && c(FALSE,TRUE) `returns <[1] FALSE>`