为什么不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)
(想避免使用大型临时变量 - 我的数据集很大)
为什么有四个逻辑运算符:
&, &&
|, ||
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)
我认为一个例子将清楚地展示它们.谢谢.
如何检测字符串中的所有字母字符(> = 2个字符)是否为大写?最后,我试图过滤掉章节标题名称,即我的数据集中的行.因此,如果章节标题是"ARYA",我希望检测到,与"女王的手"相同.
这是我正在尝试但不起作用的:
library(dplyr)
library(stringr)
str_detect("THE QUEEN’S HAND", "^[[:upper:]]{2,}+$")
#> FALSE
Run Code Online (Sandbox Code Playgroud)
我需要的要求:
toupper(x) == (x)解决方案,这将与"女王的手"一样被检测到.我也试图摆脱任何带有感叹号或句号的东西,比如"停止这个!"是的我知道,关于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"子句中是首选.
我已阅读过许多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".这里发生了什么?谢谢您的帮助!
R中的AND,OR逻辑运算符的短(&,|)和长(&&,||)形式有什么区别?
例如:
x==0 & y==1x==0 && y==1x==0 | y==1x==0 || y==1我总是在我的代码中使用简短形式.它有任何障碍吗?
当我比较 中的列时,为什么要使用|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)
这里发生了什么,为什么我应该使用一种方法来比较另一种值?
我有一个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)
这可能是什么问题?
我有两个向量x和y.我想找出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) 我想用两个变量最小化一个函数.
首先,我已经创建了一个函数(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) r ×10
if-statement ×2
conventions ×1
data.table ×1
dplyr ×1
grepl ×1
optimization ×1
regex ×1
stringr ×1
subset ×1
tidyverse ×1
vector ×1