根据R输入语言定义,之间的差&和&&(相应地|和||)是,虽然后者不是前者被矢量.
根据帮助文本,我读到的差异类似于"And"和"AndAlso"(相应地"Or"和"OrElse")之间的区别......意思是:如果不是所有的评估都不是(即如果A为真,则A或B或C始终为真,因此请停止评估A是否为真)
有人会在这里光明吗?另外,R中是否有AndAlso和OrElse?
r logical-operators or-operator boolean-operations and-operator
是的我知道,关于R 中vs 的使用,有很多问题(例如参见这个问题),但我没有找到一个专门回答我问题的问题.&&&
据我了解的不同,
&是元素方式,矢量化比较,非常类似于其他算术运算.因此,如果两个参数的长度都> 1,则返回长度> 1的逻辑向量.&&比较两个向量的第一元素,并始终返回长度为1的结果.此外,它的短路:cond1 && cond2 && cond3 && ...只判断cond2是否cond1是TRUE,等等.这允许类似的东西if(exists("is.R") && is.function(is.R) && is.R()),特别&&是在某些情况下严格需要使用.而且,if发出警告
条件的长度> 1,只使用第一个元素
如果它的条件有多个元素.
从这些预赛来看,我认为在所有不需要短路的声明中,我更愿意这样&做.&&if
如果在计算过程中出现问题,我不小心在其中一个&参数中有一个向量,我会收到警告,这很好.如果没有,一切都很好.
另一方面,如果我使用了&&,并且在我的计算中出现了问题,并且其中一个&&参数是向量,我就不会收到警告.这是不好的.如果由于某种原因,我真的想比较两个向量的第一个元素,我认为明确而不是隐含地这样做更清洁.
请注意,这与R程序员之间的共同协议相反,与R docs推荐的内容相反.(1)
因此,我的问题是:除了短路之外,是否有任何理由&&可以&在if声明中表现出色?
(1)引用help(&&):
'&'和'&&'表示逻辑AND和'|' 和'||' 表示逻辑OR.较短的形式以与算术运算符大致相同的方式执行元素比较.较长的形式从左到右评估仅检查每个向量的第一个元素.评估仅在确定结果之前进行.较长的形式适用于编程控制流程,通常在"if"子句中是首选.
R中的AND,OR逻辑运算符的短(&,|)和长(&&,||)形式有什么区别?
例如:
x==0 & y==1x==0 && y==1x==0 | y==1x==0 || y==1我总是在我的代码中使用简短形式.它有任何障碍吗?
可能重复:
R:组合条件的逻辑和运算符应为&而不是&&
我有一个简单的问题,但是我不知道该如何解决...我想选择value_1> 0和value_2> 0的所有行。现在我有了以下代码:
dataOnBoth<-data[data$value_1 > 0,][data$value_2 > 0,]
Run Code Online (Sandbox Code Playgroud)
当我在log2_fold_change上订购这些数据时,我得到以下输出:
gene_id sample_1 sample_2 status value_1 value_2 log2_fold_change
86 uc001aen.1 q1 q2 NOTEST 0.0619347 0 -1.79769e+308
150 uc001ahx.1 q1 q2 NOTEST 0.0432199 0 -1.79769e+308
186 uc001ajk.1 q1 q2 NOTEST 0.0854541 0 -1.79769e+308
251 uc001amf.1 q1 q2 NOTEST 0.0636211 0 -1.79769e+308
358 uc001are.3 q1 q2 NOTEST 0.3642040 0 -1.79769e+308
394 uc001ass.1 q1 q2 NOTEST 0.0196794 0 -1.79769e+308
test_stat p_value q_value significant
86 -1.79769e+308 0.4767020 1 no
150 -1.79769e+308 0.3960920 1 no …Run Code Online (Sandbox Code Playgroud)