如何验证for循环中的条件

如何验证for循环中的条件,r,for-loop,R,For Loop,我在研究R端数据科学。在一个问题中,我需要验证数组中的数字是否为偶数 我的代码: vetor <- list(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) for (i in vetor) { if (i %% 2 == 0) { print(i) } } 翻译: 条件的长度大于1,并且只使用第一个元素。 我需要的是,验证列表中的每个元素是否为偶数,如果为真,则打印它 在R中,我如何做呢?不需要列表的包装器 vetor <- c

我在研究R端数据科学。在一个问题中,我需要验证数组中的数字是否为偶数

我的代码:

vetor <- list(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

for (i in vetor) {
    if (i %% 2 == 0) {
      print(i)
    } 
}
翻译:

条件的长度大于1,并且只使用第一个元素。

我需要的是,验证列表中的每个元素是否为偶数,如果为真,则打印它


在R中,我如何做呢?

不需要
列表的包装器

vetor <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
这些是矢量化操作。我们不需要回路

vetor[vetor %% 2 == 0]
#[1]  2  4  6  8 10

当我们用
列表
包装向量时,它返回一个
列表
,长度为
1,单位为整个向量。
R
中的
for
循环是每个
循环的
,而不是传统的计数器控制的3部分表达式循环。因此,
i
将是整个
vetor
向量

因为
if/else
需要单个元素而不是
length
大于1的向量,因此会产生警告消息

或者,如果我们想将其存储在
列表中,每个元素的
长度
1,请使用
as.list

vetor <- as.list(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

vetor让我们分解您的代码,深入每一步,看看发生了什么


您应该注意到,
vetor
是一个列表,即

> vetor
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10
在这种情况下,vetor
中的迭代器
i表示
vetor
中的数组,可以从

> for (i in vetor) {
+   str(i)
+ }
 num [1:10] 1 2 3 4 5 6 7 8 9 10
因此,当您有条件
i%%2==0
时,您确实正在运行

> for (i in vetor) {
+   print(i %% 2 == 0)
+ }
 [1] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE
如果。。。否则…
state。这就是你收到警告的原因



关于解决方法,您可以参考,这对您有很大帮助

非常感谢,@akrun,这正是我需要了解的!
> for (i in vetor) {
+   str(i)
+ }
 num [1:10] 1 2 3 4 5 6 7 8 9 10
> for (i in vetor) {
+   print(i %% 2 == 0)
+ }
 [1] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE