gpt4 book ai didi

r - 对列表中嵌套两次的矩阵进行组合和操作

转载 作者:行者123 更新时间:2023-12-02 17:21:34 24 4
gpt4 key购买 nike

if xmpl 是一个列表,其中每个元素都有一个整数 age 和一个列表 data,其中 data包含三个大小相等的矩阵,从 ac

最好的方法是什么

cor( xmpl[[:]]$data[[:]][c('a','b','c')],  xmpl[[:]]$age)

其中结果将是3 x length(a)数组或列表,反射(reflect)与a每个元素的每个实例相关的age xmpl 中的(第 1 行)、b(第 2 行)和 c(第 3 行)。

<小时/>

我正在读取代表不同管道输出的矩阵。每个科目有 3 个这样的科目,还有很多科目。目前,我已经构建了一个主题列表,其中包含管道矩阵列表。

结构如下:

 str(exmpl)
$ :List of 4
..$ id : int 5
..$ age : num 10
..$ data :List of 3
.. ..$ a: num [1:10, 1:10] 0.782 1.113 3.988 0.253 4.118 ...
.. ..$ b: num [1:10, 1:10] 5.25 5.31 5.28 5.43 5.13 ...
.. ..$ c: num [1:10, 1:10] 1.19e-05 5.64e-03 7.65e-01 1.65e-03 4.50e-01 ...
..$ otherdata: chr "ignorefornow"
#[...]

我想将所有主题的 a 的每个元素与主题的年龄相关联。然后对 bc 执行相同的操作,并将结果放入列表中。

我认为我正在以一种对 R 来说很尴尬的方式来处理这个问题。我对存储和检索这些数据的“R 方式”感兴趣。

Data Structure and desired output http://dl.dropbox.com/u/56019781/linked/struct-2012-12-19.svg

library(plyr)

## example structure
xmpl.mat <- function(){ matrix(runif(100),nrow=10) }
xmpl.list <- function(x){ list( id=x, age=2*x, data=list( a=x*xmpl.mat(), b=x+xmpl.mat(), c=xmpl.mat()^x ), otherdata='ignorefornow' ) }
xmpl <- lapply( 1:5, xmpl.list )

## extract
ages <- laply(xmpl,'[[','age')
data <- llply(xmpl,'[[','data')

# to get the cor for one set of matrices is easy enough
# though it would be nice to do: a <- xmpl[[:]]$data$a
x.a <- sapply(data,'[[','a')
x.a.corr <- apply(x.a,1,cor,ages)

# ...

#xmpl.corr <- list(x.a.corr,x.b.corr,x.c.corr)

# and by loop, not R like?
xmpl.corr<-list()
for (i in 1:length(names(data[[1]])) ){
x <- sapply(data,'[[',i)
xmpl.corr[[i]] <- apply(x,1,cor,ages)
}
names(xmpl.corr) <- names(data[[1]])

最终输出:

str(xmpl.corr)
List of 3
$ a: num [1:100] 0.712 -0.296 0.739 0.8 0.77 ...
$ b: num [1:100] 0.98 0.997 0.974 0.983 0.992 ...
$ c: num [1:100] -0.914 -0.399 -0.844 -0.339 -0.571 ..

最佳答案

这是一个解决方案。它应该足够短。

ages <- sapply(xmpl, "[[", "age")                      # extract ages
data <- sapply(xmpl, function(x) unlist(x[["data"]])) # combine all matrices
corr <- apply(data, 1, cor, ages) # calculate correlations
xmpl.corr <- split(corr, substr(names(corr), 1, 1)) # split the vector

关于r - 对列表中嵌套两次的矩阵进行组合和操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13977303/

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