如何验证for循环中的条件
我正在学习 R 端数据科学。在一个问题中,我需要验证数组中的数字是否为偶数。
我的代码:
vetor <- list(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
for (i in vetor) {
if (i %% 2 == 0) {
print(i)
}
}
但结果是一条警告消息:
Warning message:
In if (i%%2 == 0) { :
a condição tem comprimento > 1 e somente o primeiro elemento será usado
翻译:
条件的长度 > 1,并且只会使用第一个元素。
我需要的是,验证列表中的每个元素是否为偶数,如果为真,则打印它。
在 R 中,我该怎么做?
回答
list不需要包装器
vetor <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
运行 OP 的代码
for (i in vetor) {
if (i %% 2 == 0) {
print(i)
}
}
#[1] 2
#[1] 4
#[1] 6
#[1] 8
#[1] 10
这些是矢量化操作。我们不需要循环
vetor[vetor %% 2 == 0]
#[1] 2 4 6 8 10
当我们与包裹该载体list,它返回一个list的length1和单元将是整个矢量。该for环在R是一个for each环路,而不是传统的计数器控制部3表达式循环。所以,i将是整个vetor向量。
因为if/else需要单个元素而不是length大于 1的向量,所以会导致警告消息
或者,如果我们想将它存储在list每个元素为length1 的 a 中,请使用as.list
vetor <- as.list(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))