gpt4 book ai didi

r - 将函数应用于列表的列表的特定元素

转载 作者:行者123 更新时间:2023-12-01 09:29:11 24 4
gpt4 key购买 nike

我有一个返回向量和矩阵列表的函数。然后,我创建一个变量,该变量是对函数调用的几个结果列表的列表。所以我有一个列表列表。我的问题是如何在这些列表的元素上应用函数(注意这与在列表本身上应用函数不同)。这是一个简单的例子,它保留了我正在做的所有基本特征

numtrials = 5

x = rep(list(NULL),numtrials)

testfunction = function(){return( list( c(1,2,3,4,5), matrix(runif(10), 2,5),
matrix(0,2,2) ) )}

for(index in 1:numtrials){
x[[index]] = testfunction()
}

我现在想计算所有“索引”列表中 x[[index]][[2]] 的 (2,3) 元素的平均值。或者更好地得到一个均值矩阵,xbar,这样 xbar[i,j] = mean(x[[]][[2]][i,j])。我尝试使用(当然还阅读了帮助文件)lapplyapply,但无法让它工作。原因之一是 x[[]][[2]][i,j] 似乎是无效的符号

Error in x[[]] : invalid subscript type 'symbol'

我认为 R 不知道如何理解“[[]]”。我知道有些人会建议向量化,但请注意,我的函数返回不同、不相关维度的矩阵和向量(尽管如果你有一个聪明的方法,我不反对向量化)。

最佳答案

使用 abind 您可以创建一个列表,其中包含内部列表的相关组件的数组..

例如

library(abind)

xl <- do.call(mapply, c('abind', x, rev.along = 0))


# the second element from each inner list is now within a 3-d array
# which is the 2nd element of xl

# you can now construct your matrix of mean values by using `apply`

means <- apply(xl[[2]], 1:2, mean)
means
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.4576039 0.5185270 0.7099742 0.3812656 0.4529965
## [2,] 0.6528345 0.2304651 0.5534443 0.4404609 0.7361132

关于r - 将函数应用于列表的列表的特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17823938/

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