首页 > 解决方案 > 我可以使用“lapply”在 R 中重写这个循环吗?

问题描述

我在 R 中有一个脚本,我试图用它来通过某个变量分隔几个数据帧。我目前正在使用循环来执行此操作,并想知道是否可以使用lapply或类似的功能。

循环本质上是一个数据框,df,它有一个名为 的列Time。时间值以小时为单位,范围为 0-48 乘以 6 的倍数(这是索引列表包含的内容)。

代码应创建一个名为 data.time.0 的新数据框,其中包含时间 = 0 的所有行,以此类推每个时间值。

library(tidyverse)

index = seq(from = 0, to = 48, by = 6)

for (i in index) {
  name = paste("data.time."+i,sep = "")
  currentdf = filter(df,df$time == i)
  assign(name,currentdf)
}

但是,我听说assign应该尽可能避免使用,我想使用向量运算而不是循环。这可能吗?我该怎么做?

标签: rvectorization

解决方案


直接翻译lapply()

mylist <- lapply(seq(from = 0, to = 48, by = 6), function(x){
  filter(df, df$time == x)
})

names(mylist) <- paste("data.time.", seq(from = 0, to = 48, by = 6),sep = "")

不过,我同意@Roland 的评论。很可能有一种更简单的方法。


推荐阅读