使用for循环在数据帧列表中循环
我是新来的,经验不是很丰富,我正在试着让R shinyapp的一个项目运作起来 我有一个数据帧列表,其中有一列标记为“性别”,包含all/M/F。我希望根据输入筛选所有数据帧,以便如果输入为男性,则只保留包含M或all的行使用for循环在数据帧列表中循环,r,loops,R,Loops,我是新来的,经验不是很丰富,我正在试着让R shinyapp的一个项目运作起来 我有一个数据帧列表,其中有一列标记为“性别”,包含all/M/F。我希望根据输入筛选所有数据帧,以便如果输入为男性,则只保留包含M或all的行 list_tables <- list(adverb,adjective,simplenoun,verber,thingnoun, personnoun,name_firstpart,name_secondpart) input$g
list_tables <- list(adverb,adjective,simplenoun,verber,thingnoun,
personnoun,name_firstpart,name_secondpart)
input$gender <- "male
if(input$gender == "male"){
for (i in list_tables){
list_tables$i <- i[which((i$Gender=="M")|(i$Gender=="all")),]
}
}
list\u tablesi
不是list\u tables
中的命名条目,因此list\u tables$i
不起作用。在该循环中,i
是您试图修改的data.frame
,但您不更新它
尝试以下任一方法:
for (ind in seq_along(list_tables)) {
i <- list_tables[[ind]] # feels a little sloppt, but it's compact ...
list_tables[[ind]] <- i[which((i$Gender=="M")|(i$Gender=="all")),]
}
for(ind按顺序排列(列表)){
i您可以对子集使用lappy
:
例如:
list_tables <- replicate(2,iris[c(1,51,101),],F)
# [[1]]
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 51 7.0 3.2 4.7 1.4 versicolor
# 101 6.3 3.3 6.0 2.5 virginica
#
# [[2]]
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 51 7.0 3.2 4.7 1.4 versicolor
# 101 6.3 3.3 6.0 2.5 virginica
在您的情况下,这将是:
lapply(list_tables,subset,Gender %in% c("M","all"))
我想你在第一个男
后错过了一个引语?仅供参考,你可以跳过哪个呼叫,请将逻辑
输入[
即可。这是一种很好的礼节,为阅读你的问题的任何人提供了“结尾”,并提供了一点“谢谢”(以“+名誉”的形式)对于那些花时间帮忙的人。
lapply(list_tables,subset,Species %in% c("setosa","virginica"))
# [[1]]
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 101 6.3 3.3 6.0 2.5 virginica
#
# [[2]]
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 101 6.3 3.3 6.0 2.5 virginica
lapply(list_tables,subset,Gender %in% c("M","all"))