相关疑难解决方法(0)

R gotcha:用于组合条件的逻辑和运算符是&not &&

为什么不subset()兼容&&两个条件的逻辑和运算符?

> subset(tt, (customer_id==177 && visit_date=="2010-08-26"))
<0 rows> (or 0-length row.names)
Run Code Online (Sandbox Code Playgroud)

但它们各自独立工作:

> subset(tt, customer_id==177)

> subset(tt, visit_date=="2010-08-26")
Run Code Online (Sandbox Code Playgroud)

(想避免使用大型临时变量 - 我的数据集很大)

r subset logical-operators

21
推荐指数
2
解决办法
2万
查看次数

&和&&,|之间的区别是什么 和|| 在R?

为什么有四个逻辑运算符:

&, &&
|, ||
Run Code Online (Sandbox Code Playgroud)

使用上有什么不同?

是的,我检查了文档,但我有点困惑.文档说:

 ‘&’ and ‘&&’ indicate logical AND and ‘|’ and ‘||’ indicate
 logical OR.  The shorter form performs elementwise comparisons in
 much the same way as arithmetic operators.  The longer form
 evaluates left to right examining only the first element of each
 vector.  Evaluation proceeds only until the result is determined.
 The longer form is appropriate for programming control-flow and
 typically preferred in ‘if’ clauses.
Run Code Online (Sandbox Code Playgroud)

我认为一个例子将清楚地展示它们.谢谢.

r

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

正则表达式检测所有字母字符是否为大写

如何检测字符串中的所有字母字符(> = 2个字符)是否为大写?最后,我试图过滤掉章节标题名称,即我的数据集中的行.因此,如果章节标题是"ARYA",我希望检测到,与"女王的手"相同.

这是我正在尝试但不起作用的:

library(dplyr)
library(stringr)

str_detect("THE QUEEN’S HAND", "^[[:upper:]]{2,}+$")
#> FALSE
Run Code Online (Sandbox Code Playgroud)

我需要的要求:

  • 字符数> = 2因为我最终使用它来过滤掉章节名称,但有时会出现一行"I"这个词,但这不是章节 - 它只是一个单词.虽然这可以在不同的点过滤
  • 仅检测到字母字符或撇号.有时行是"...",我不想检测到.但是,如果我使用toupper(x) == (x)解决方案,这将与"女王的手"一样被检测到.我也试图摆脱任何带有感叹号或句号的东西,比如"停止这个!"

regex r stringr grepl

15
推荐指数
5
解决办法
3031
查看次数

除了短路之外,是否有理由在'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
查看次数

在if语句中的R多个条件

我已阅读过许多if语句帖子,但未能找到我的简单问题的答案.我想基于多条件if语句在数据框'tester'中创建一个新列.

tester<- as.data.frame(matrix(data=c(seq(1,300,by=1.5)), ncol=4))

if (tester$V3> 200 && tester$V4>250){tester[,5] <- "one"} else tester$V5 <-NA
Run Code Online (Sandbox Code Playgroud)

这给了我整个列的NA,即使最后17行对于两种情况都是TRUE并且应该是"1".这里发生了什么?谢谢您的帮助!

if-statement r

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

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
查看次数

使用 any() 与 | 在 dplyr::mutate 中

当我比较 中的列时,为什么要使用|vs ?any()dplyr::mutate()

为什么他们返回不同的答案?

例如:

library(tidyverse)
df  <- data_frame(x = rep(c(T,F,T), 4), y = rep(c(T,F,T, F), 3), allF  = F, allT = T)

 df %>%
     mutate( 
          withpipe = x | y # returns expected results by row
        , usingany = any(c(x,y)) # returns TRUE for every row
     )
Run Code Online (Sandbox Code Playgroud)

这里发生了什么,为什么我应该使用一种方法来比较另一种值?

r dplyr tidyverse

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

具有多个条件的ifelse,用于在data.table中创建新变量

我有一个data.table并且想要在一个ifelse语句中基于多个条件创建一个新变量但是我得到的结果似乎很奇怪.

让我们想象下面的简化示例.

DT <- data.table(replicate(2,sample(0:1,5,replace=TRUE)))

   V1 V2
1:  1  0
2:  1  1
3:  1  1
4:  1  0
5:  0  1
Run Code Online (Sandbox Code Playgroud)

我想基于现有变量创建一个新变量.我使用ifelse如下声明:

DT[, new.var := ifelse(V1 > 0, 1, 0)]
DT[, new.var.mult := ifelse(V1 > 0 && V2 > 0, 1, 0)]
Run Code Online (Sandbox Code Playgroud)

但是,这在多个条件的情况下不起作用.(我知道这个任务可以在没有多重条件的情况下轻松解决,但我的问题更复杂.)

   V1 V2 new_var new_var_multiple
1:  1  0       1                0
2:  1  1       1                0
3:  1  1       1                0
4:  1  0       1                0
5:  0  1       0                0
Run Code Online (Sandbox Code Playgroud)

这可能是什么问题?

if-statement r data.table

6
推荐指数
1
解决办法
4555
查看次数

找到向量的哪个元素在R中的两个值之间

我有两个向量xy.我想找出xvector的两个元素之间的哪些元素y.我怎么能在R?

x = c( .2, .4, 2.1, 5.3, 6.7, 10.5)
y = c( 1, 7)
Run Code Online (Sandbox Code Playgroud)

我写了以下代码,但它没有给我正确的结果.

> x = x[ x >= y[1] && x <= y[2]]
> x
numeric(0)
Run Code Online (Sandbox Code Playgroud)

结果应该是这样的:

res = c(2.1, 5.3, 6.7)
Run Code Online (Sandbox Code Playgroud)

r vector

5
推荐指数
2
解决办法
2万
查看次数

使用两个变量最小化函数

我想用两个变量最小化一个函数.

首先,我已经创建了一个函数(rba),在(kvasum)我需要最小化的函数内部需要它.最小化的值是其中的一部分rba.

# Data
vpk = data.frame(V1 =c(3650000000, 19233, 2211.2, 479.47, 168.46, 83.447, 52.349, 38.738,
                     32.34, 29.588), V2 = 1:10)
n = nrow(vpk)

# functions to minimize 

# This function returns a vector with 10 values

rba = function(par){
  v <- matrix(ncol = 1, nrow = 10)
  for (p in 1:10){
    k<- ifelse (par[1] < 1-1/p && par[1]>0 && p > par[2] && 
par[2]>0 && par[2]<2, par[2]*p,
                    ifelse(par[1] < 1-1/par[2] && par[1] > 0 …
Run Code Online (Sandbox Code Playgroud)

optimization r

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