if循环在for循环中,该循环在R中的列表上迭代?
完全是R的初学者,我已经找了很多地方,但是我找不到我需要的东西 我有一个for循环,它迭代一系列值。我想在for循环中加入一个if循环,如下所示:if循环在for循环中,该循环在R中的列表上迭代?,r,list,R,List,完全是R的初学者,我已经找了很多地方,但是我找不到我需要的东西 我有一个for循环,它迭代一系列值。我想在for循环中加入一个if循环,如下所示: for (i in list){ if (i>200){ print (i) } } 这将返回以下警告: “警告信息: 如果(i>200){: 该条件的长度大于1,且仅使用第一个元素“ 果不其然,if循环只检查列表中第一个元素的条件 我知道这可能是因为for循环在R中不返回任何内容,但解
for (i in list){
if (i>200){
print (i)
}
}
这将返回以下警告:
“警告信息:
如果(i>200){:
该条件的长度大于1,且仅使用第一个元素“
果不其然,if循环只检查列表中第一个元素的条件
我知道这可能是因为for循环在R中不返回任何内容,但解决方法是什么。我如何解决这个问题
谢谢你的帮助
for (i in 1:20){
if (i>10) print(i)
}
一般来说,条件可以是真的,也可以是假的:1或0。因此,条件的长度必须始终为1。您的问题不够详细,无法准确地知道您想要做什么 一般来说,
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
#数字向量列表
我的清单(200]})
#一美元
# [1] 201 202
#
#b美元
# [1] 203
#
#$c
# [1] 203 210
请告诉我这是否是您想要的我不明白我做错了什么。对我来说,if语句只是比较列表中的第一个条目。如果第一个条目大于200,则打印整个列表,否则什么也不打印。问题是我们不知道
list
中有什么。如果list
是一个向量列表,则i
是一个向量,i>200
将在将向量与单个数字进行比较时返回警告消息。For循环通过索引运行。使用索引获取对象中的每个元素。如果要查看列表中的第一个元素,则可以将其子集<代码>如果(列表[[1]][1]>200)打印(列表[[1]])谢谢。我意识到我的列表包含向量。你的帮助帮我解决了这个问题。我尝试过升级投票,但由于我的帐户是全新的,我不能。您能提供您在列表中拥有的内容吗?警告基本上告诉您,如果i
中的向量大于1,则只使用第一个元素。这基本上意味着列表的结构存在问题。您可以使用类似于L200)print(i)
的方法轻松地重现此结果,将str(list)
的输出添加到您的问题中应该会有所帮助。