我可以使用lapply在R中重写此循环吗?

时间:2019-02-27 15:46:40

标签: r vectorization

我在R中有一个脚本,我正在尝试使用该脚本通过某个变量来分隔多个数据帧。我目前正在使用循环来执行此操作,想知道是否可以代替使用lapply或类似的函数。

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

代码应该创建一个名为data.time.0的新数据帧,其中包含time = 0的所有行,依此类推,对于每个time值。

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,并且我想使用向量运算而不是循环。这可能吗?我该怎么办?

1 个答案:

答案 0 :(得分:1)

将直接翻译为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的评论。很可能有一种更简单的方法。