在R中,当我在虹膜数据集中输入以下代码时:
iris %>%
filter(Petal.Width == 0.2 & Species == "setosa") %>%
dim()
我知道
[1] 29 5
我想遍历Petal.Width = 0.1、0.2、0.3、0.4、0.5的值,并获得5个不同的输出。
list1 = list(0.1, 0.2, 0.3, 0.4, 0.5)
for(i in list1){
df_test <- iris %>%
filter(Petal.Width == i & Species == "setosa") %>%
dim()
}
df_test
但是,上面的代码仅返回一个输出:
[1] 1 5
为什么会发生这种情况,而我该如何返回5个输出呢?
答案 0 :(得分:0)
这里不需要显式的for
循环;最好改用map
(或在基数R中使用lapply
)
library(tidyverse)
map(list1, ~iris %>%
filter(Petal.Width == .x & Species == "setosa") %>%
dim())
#[[1]]
#[1] 5 5
#
#[[2]]
#[1] 29 5
#
#[[3]]
#[1] 7 5
#
#[[4]]
#[1] 7 5
#
#[[5]]
#[1] 1 5
输出对象是list
。
为回应您的评论,您可以使用嵌套的map
map(setNames(list1, list1), function(x) map(setNames(list2, list2), function(y) iris %>%
filter(Petal.Width == x & Species == y) %>%
dim()))
#$`0.1`
#$`0.1`$setosa
#[1] 5 5
#
#$`0.1`$versicolor
#[1] 0 5
#
#$`0.1`$virginica
#[1] 0 5
#
#
#$`0.2`
#$`0.2`$setosa
#[1] 29 5
#
#$`0.2`$versicolor
#[1] 0 5
#
#$`0.2`$virginica
#[1] 0 5
#
#
#$`0.3`
#$`0.3`$setosa
#[1] 7 5
#
#$`0.3`$versicolor
#[1] 0 5
#
#$`0.3`$virginica
#[1] 0 5
#
#
#$`0.4`
#$`0.4`$setosa
#[1] 7 5
#
#$`0.4`$versicolor
#[1] 0 5
#
#$`0.4`$virginica
#[1] 0 5
#
#
#$`0.5`
#$`0.5`$setosa
#[1] 1 5
#
#$`0.5`$versicolor
#[1] 0 5
#
#$`0.5`$virginica
#[1] 0 5