对R中的日期序列使用函数和lapply



我尽量不使用for循环,而是使用函数和lapply生成一个以天分隔的日期序列,并将其附加到数据中。首先,我尝试了

x = data.frame(
date = seq.Date(from = as.Date((q)[['d1']]),to = as.Date(q[['d2']]),by = "days"),
m = (q)[['m']],
stringsAsFactors = F
)
return(x)
}
y = list(
d1 = as.Date(c("2012/01/31","2012/01/14")),
d2 = as.Date(c("2012/01/31","2012/01/21")),
m = c(100,75))
z <- do.call(rbind,lapply(y,fn))

但我在[[.default(q,"d1"(中得到错误:下标越界,我试图使用get((来修复它

然后我尝试了

x = data.frame(
date = seq.Date(from = as.Date(get(q)[['d1']]),to = as.Date(get(q[['d2']]),by = "days"),
m = get(q)[['m']],
stringsAsFactors = F
)
return(x)
}
y = list(
d1 = as.Date(c("2012/01/31","2012/01/14")),
d2 = as.Date(c("2012/01/31","2012/01/21")),
m = c(100,75))
z <- do.call(rbind,lapply(y,fn))

我试过了,但在get(q(中出错:第一个参数无效

list上执行lapply时,它会将函数单独应用于每一列。您的lapply(y, fn)相当于list(fn(y[["d1"]]), fn(y[["d2"]]), fn(y[["q"]])),因为这些都是列表项。当然,这不起作用,因为您的函数需要一个list,其中d1d2q各有一个值作为输入。

只需进行最小的更改,我们就可以将您的列表转换为数据帧,并将该函数应用于行:

dy = as.data.frame(y)
result = do.call(rbind, lapply(1:nrow(dy), (i) fn(dy[i, ])))
result
#         date   m
# 1 2012-01-31 100
# 2 2012-01-14  75
# 3 2012-01-15  75
# 4 2012-01-16  75
# 5 2012-01-17  75
# 6 2012-01-18  75
# 7 2012-01-19  75
# 8 2012-01-20  75
# 9 2012-01-21  75

相关内容

  • 没有找到相关文章

最新更新