相关疑难解决方法(0)

布尔运算符&&和||

根据R输入语言定义,之间的差&&&(相应地|||)是,虽然后者不是前者被矢量.

根据帮助文本,我读到的差异类似于"And"和"AndAlso"(相应地"Or"和"OrElse")之间的区别......意思是:如果不是所有的评估都不是(即如果A为真,则A或B或C始终为真,因此请停止评估A是否为真)

有人会在这里光明吗?另外,R中是否有AndAlso和OrElse?

r logical-operators or-operator boolean-operations and-operator

232
推荐指数
4
解决办法
26万
查看次数

除了短路之外,是否有理由在'if'语句中更喜欢'&&'而不是'&'?

是的我知道,关于R 中vs 的使用,有很多问题(例如参见这个问题),但我没有找到一个专门回答我问题的问题.&&&

据我了解的不同,

  • &是元素方式,矢量化比较,非常类似于其他算术运算.因此,如果两个参数的长度都> 1,则返回长度> 1的逻辑向量.
  • &&比较两个向量的第一元素,并始终返回长度为1的结果.此外,它的短路:cond1 && cond2 && cond3 && ...只判断cond2是否cond1TRUE,等等.这允许类似的东西if(exists("is.R") && is.function(is.R) && is.R()),特别&&是在某些情况下严格需要使用.

而且,if发出警告

条件的长度> 1,只使用第一个元素

如果它的条件有多个元素.

从这些预赛来看,我认为在所有不需要短路的声明中,我更愿意这样&做.&&if

如果在计算过程中出现问题,我不小心在其中一个&参数中有一个向量,我会收到警告,这很好.如果没有,一切都很好.

另一方面,如果我使用了&&,并且在我的计算中出现了问题,并且其中一个&&参数是向量,我就不会收到警告.这是不好的.如果由于某种原因,我真的想比较两个向量的第一个元素,我认为明确而不是隐含地这样做更清洁.

请注意,这与R程序员之间的共同协议相反,与R docs推荐的内容相反.(1)

因此,我的问题是:除了短路之外,是否有任何理由&&可以&if声明中表现出色?


(1)引用help(&&):

'&'和'&&'表示逻辑AND和'|' 和'||' 表示逻辑OR.较短的形式以与算术运算符大致相同的方式执行元素比较.较长的形式从左到右评估仅检查每个向量的第一个元素.评估仅在确定结果之前进行.较长的形式适用于编程控制流程,通常在"if"子句中是首选.

r conventions vectorization

13
推荐指数
2
解决办法
1996
查看次数

R中的AND,OR逻辑运算符的短(&,|)和长(&&,||)形式有什么区别?

可能重复:
R:subset()逻辑 - 和链接条件的运算符应该是¬ &&

R中的AND,OR逻辑运算符的短(&,|)和长(&&,||)形式有什么区别?

例如:

  1. x==0 & y==1
  2. x==0 && y==1
  3. x==0 | y==1
  4. x==0 || y==1

我总是在我的代码中使用简短形式.它有任何障碍吗?

r logical-operators

7
推荐指数
1
解决办法
1019
查看次数

矩阵行选择中的R个多重条件

可能重复:
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)

row r matrix selection conditional-statements

3
推荐指数
1
解决办法
1万
查看次数