2

以下代码工作正常。但是,我想在没有 for 循环的情况下获得所需的输出。有什么想法吗

library(magrittr)
data("mtcars")

df1 <- mtcars %>% dplyr::filter(mpg > qsec*1/2)
df2 <- mtcars %>% dplyr::filter(mpg > qsec*2/2)

df <- vector("list", 2)

for(i in 1:2){
  df[[i]] <- mtcars %>% dplyr::filter(mpg > qsec*i/2)
}
4

2 回答 2

3

lapply() 是替换循环的标准方法:

df <- lapply(1:2 / 2, function(x) dplyr::filter(mtcars, mpg > qsec*x))
于 2018-06-06T14:01:23.613 回答
2

如果我们需要一个listedfilter数据集,我们可以使用mapfrom purrrtidyverse包的一部分)

library(tidyverse)
map(1:2, ~ mtcars %>% 
                dplyr::filter(mpg > qsec * .x/2))

要拥有单个数据集,请mapmap_df和 替换以具有某种标识符,请使用.id

map_df(1:2, ~ mtcars %>% 
                 dplyr::filter(mpg > qsec * .x/2), .id = 'grp')
于 2018-06-06T13:56:54.143 回答