R中|和|之间的差异
我必须承认,我是一个大菜鸟,但我不理解这两个操作员之间的区别。我读了以下内容,但我很难理解: “较短的形式执行元素级比较的方式与算术运算符基本相同。较长的形式从左到右求值,只检查每个向量的第一个元素。求值只在确定结果之前进行。较长的形式适用于控制流编程,通常在if子句中首选。”R中|和|之间的差异,r,operators,R,Operators,我必须承认,我是一个大菜鸟,但我不理解这两个操作员之间的区别。我读了以下内容,但我很难理解: “较短的形式执行元素级比较的方式与算术运算符基本相同。较长的形式从左到右求值,只检查每个向量的第一个元素。求值只在确定结果之前进行。较长的形式适用于控制流编程,通常在if子句中首选。” 为什么第二种形式更合适?第二种形式有助于避免在第二种(或后续更长的语句)情况下出现冗长的计算或错误 特别是, condition || lengthyComputation() 如果条件为真,将快速解决。比如说, sy
为什么第二种形式更合适?第二种形式有助于避免在第二种(或后续更长的语句)情况下出现冗长的计算或错误 特别是,
condition || lengthyComputation()
如果条件
为真
,将快速解决。比如说,
system.time(TRUE || {Sys.sleep(1);TRUE})
user system elapsed
0 0 0
system.time(FALSE || {Sys.sleep(1);TRUE})
user system elapsed
0 0 1
short对向量进行元素操作,并返回与输入向量大小相同的向量。如有必要,它将回收较短的向量:
> c(FALSE, FALSE) | c(TRUE, FALSE)
[1] TRUE FALSE
长格式只考虑每个vecotr的第一个元素,并返回一个长度为1的逻辑向量
> c(FALSE, FALSE) || c(FALSE, TRUE, FALSE)
[1] FALSE
通常,只要有if语句,就需要一个长度为1的逻辑向量作为条件。由于
|
比|
快,因此应首选此版本 控制流语句期望条件是布尔值(或可以转换为它的东西)。
第一个运算符
|
不返回布尔值,而是返回布尔向量,因此不打算在条件中使用。<代码> < <代码> >操作符返回一个布尔值,使其适合于控制流。最好的办法是自己做实验,看看这些运算符是如何作用于标量和向量的。请考虑使用一个例子,使用<代码>如果-语句来说明差异。在R(几乎)中一切都是向量。|
的返回值是长度为1的逻辑(原子)向量。