if循环在for循环中迭代R中的列表?

时间:2017-05-21 06:40:41

标签: r list

用R完成初学者我看了很多但我找不到我需要的东西。

我有一个for循环,它迭代一个值列表。我想在for循环中放置一个if循环,如下所示:

    for (i in list){
    if (i>200){
        print (i)
        }
    }

返回以下警告:

“警告讯息: 在if(i> 200){:   条件的长度> 1,只使用第一个元素“

果然,if循环只检查列表中第一个元素的条件。

我知道这可能是因为for循环不会返回R中的任何内容,但是解决方法是什么。我该如何解决这个问题?

谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

for (i in 1:20){
     if (i>10) print(i)
    }

通常,条件为真或假:1或0.因此条件必须始终为长度1.

答案 1 :(得分:0)

您的问题不够详细,无法准确了解您的目标。

通常,apply系列对于使用向量非常有用:请参阅带有?apply的文档

如果您有一个数字向量列表,您只想从中保留> 200向量的那些元素,那么您可以使用以下代码:

# list of numeric vectors
my_list <- list(a = c(201, 199, 202),
                b = c(9, 203, 188),
                c = c(203, 210, 7))


# using the apply family to e.g. calculate a mean
sapply(my_list, mean)
#        a        b        c 
# 200.6667 133.3333 140.0000 

# same thing but now with explicitely naming the vector i
# using an anonymous function
sapply(my_list, function(i) mean(i))
#        a        b        c 
# 200.6667 133.3333 140.0000 

# using a anonymous function to select in the vector what we want
sapply(my_list, function(i){ i[i>200] })
# $a
# [1] 201 202
# 
# $b
# [1] 203
# 
# $c
# [1] 203 210

请告诉我这是否是你想要的