【发布时间】:2018-09-03 08:13:17
【问题描述】:
假设我有三个数据,每个包含随机的 20 个数字:
> dataone
[1] 5.7 15.3 14.0 13.2 14.0 9.4 19.0 13.7 19.4 19.3 11.5 16.6 17.7 3.2 4.7 1.4 18.4 10.1 9.6 16.4
> datatwo
[1] 21 13 29 29 22 13 18 13 29 13 23 17 17 11 29 15 20 21 26 17
> datathree
[1] 6.7 9.8 1.9 5.9 5.3 5.2 1.2 5.3 2.2 8.6 2.9 4.6 4.9 6.1 9.4 10.0 5.1 9.8 3.1 3.2
我想按顺序计算每四个数字的平均值。为了清楚起见,对于每个数据,我想要[1:4]、[5:8]、[9:12] 等等。所以,我写了这个函数:
foursmean <- function (x) {
starts <- seq(1, 20, by = 4)
means <- numeric(length(starts))
for (i in 1:length(starts)){
a <- mean(x[starts[i]:(starts[i]+3)] )
means[i] <- a }
print(means)
}
到目前为止效果还不错:
> foursmean(dataone)
[1] 12.1 14.0 16.7 6.7 13.6
但是,我不想花时间对所有数据使用函数。所以我将它们收集在一个列表中:
dataall <- list(dataone, datatwo, datathree)
然后我使用lapply() 在列表上运行函数:
> lapply(dataall, foursmean)
[1] 12.1 14.0 16.7 6.7 13.6
[1] 23 16 21 18 21
[1] 6.0 4.2 4.6 7.6 5.3
[[1]]
[1] 12.1 14.0 16.7 6.7 13.6
[[2]]
[1] 23 16 21 18 21
[[3]]
[1] 6.0 4.2 4.6 7.6 5.3
我不明白为什么它会给出重复的结果。当我检查结构时,它显示“List of 3 of 5s”。我想不通,解决不了。
我只期待这部分:
[[1]]
[1] 12.1 14.0 16.7 6.7 13.6
[[2]]
[1] 23 16 21 18 21
[[3]]
[1] 6.0 4.2 4.6 7.6 5.3
【问题讨论】:
-
当我删除打印时,结果是: [[1]] NULL [[2]] NULL [[3]] NULL 而且,foursmean(dataone) 没有给出任何结果。
-
只写means而不是print(means)