我想验证数字列表是否在范围内。
如果数字列表小于33且大于38,我希望这些数字与他们的订单一起返回。
i<-c(33,34,35,36,37,38,80,100)
for (i in 1:length(i)) {
if ( 33 < i & i < 38 ) {
next
}
print(i)
}
但它会返回所有内容,即使它不应该
答案 0 :(得分:0)
以下是您尝试执行的操作的简短版本:
vec <- c(33, 34, 35, 36, 37, 38, 80, 100)
vec[!vec %in% c(34:37)]
[1] 33 38 80 100
如果您还想更正当前代码,请考虑以下更新版本:
for (i in 1:length(vec)) {
if (33 < vec[i] && vec[i] < 38) {
next
}
print(vec[i])
}
主要问题是您对i
循环中的数字向量和虚拟变量使用相同的变量for
。另外,对于AND
两个逻辑条件,您应该使用&&
,而不是&
(后者是AND的矢量化形式)。
答案 1 :(得分:0)
循环中的问题确实是你使用i
作为矢量名和索引变量。以下是使用重命名的索引变量
i<-c(33,34,35,36,37,38,80,100)
for (j in 1:length(i)) {
if (! ( 33 < i[j] & i[j] < 38 )) {
print(i[j])
}
}
顺便说一下,使用R是面向矢量的这一事实,这是一种更紧凑的方式:
indexes <- which(i > 33 & i < 38)
i[indexes]