gpt4 book ai didi

r - 使用自定义函数时 lapply 出现意外结果

转载 作者:行者123 更新时间:2023-12-02 02:55:57 25 4
gpt4 key购买 nike

假设我有三个数据,每个包含随机的 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 List 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

最佳答案

您必须删除代码中的 print

或许您可以尝试这种形式的函数。

数据:

dataone <-   c( 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 <- c( 21, 13, 29 ,29 ,22 ,13 ,18 ,13 ,29 ,13, 23, 17 ,17 ,11, 29, 15, 20, 21 ,26, 17)
datathree <- c( 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)
dataall <- list(dataone = dataone,
datatwo = datatwo,
datathree = datathree )

代码:

foursmean <- function (x, by ) {
x <- split( x = x, f = ceiling( seq_along(x) / by) )
sapply( x, mean, na.rm = TRUE )
}

输出:by 指定您希望分割向量的程度。你可以有任何正数

sapply(dataall, foursmean, by = 4)
# dataone datatwo datathree
# 1 12.050 23.0 6.075
# 2 14.025 16.5 4.250
# 3 16.700 20.5 4.575
# 4 6.750 18.0 7.600
# 5 13.625 21.0 5.300

sapply(dataall, foursmean, by = 5)
# dataone datatwo datathree
# 1 12.44 22.8 5.92
# 2 16.16 17.2 4.50
# 3 10.74 19.4 5.58
# 4 11.18 19.8 6.24

关于r - 使用自定义函数时 lapply 出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49470194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com