R 正在寻找一种更优雅的方法,用列表中的特定值填充矩阵

R 正在寻找一种更优雅的方法,用列表中的特定值填充矩阵,r,for-loop,R,For Loop,我有一个结构相当复杂的列表,我只想从中提取一些特定的值。由于数据的dput输出和列表的结构在本例中似乎有问题,因此我在这里重现@user34771用于生成此列表的代码: set.seed(123) testdf <- data.frame(vy = rnorm(60), vx = rnorm(60) , gvar = rep(c("a","b"), each=30)) require(fBasics) normfuns <- list(jarqueberaTest=jarqueber

我有一个结构相当复杂的列表,我只想从中提取一些特定的值。由于数据的
dput
输出和列表的结构在本例中似乎有问题,因此我在这里重现@user34771用于生成此列表的代码:

set.seed(123)
testdf <- data.frame(vy = rnorm(60), vx = rnorm(60) , gvar = rep(c("a","b"), each=30))
require(fBasics)
normfuns <- list(jarqueberaTest=jarqueberaTest, shapiroTest=shapiroTest, lillieTest=lillieTest)
mynormtest <- function(d) {
norm_test <- res_reg <- list()
for (i in c("a","b")){
  res_reg[[i]] <- residuals(lm(vy~vx, data=d[d$gvar==i,]))
  norm_test[[i]] <- lapply(normfuns, function(f) f(res_reg[[i]]))  
 }
return(norm_test) 
}
res_list <- mynormtest(testdf)
此功能提供所需的输出

> getparams2(res_list)
          [,1]      [,2]       [,3]
[1,] 0.9917054 0.9670860 0.08837058
[2,] 0.1421776 0.9806379 0.12619274
但是,我不喜欢函数
getparams2()
的样式及其
FOR
循环。我很高兴知道这个函数是否可以写得更优雅、更简洁。感谢您的帮助。

要获取矩阵:

getparams2 <- function(myp) {
m <- matrix(NA, nrow=length(myp), ncol=3)
for (i in (1:length(myp))){
 m[i,] <- sapply(1:3,function(x) myp[[i]][[x]]@test$statistic)}
return(m)
}
t(sapply(res_list, sapply, function(x) x@test$statistic))
#  jarqueberaTest.X-squared shapiroTest.W lillieTest.D
#a                0.9917054     0.9670860   0.08837058
#b                0.1421776     0.9806379   0.12619274
或使用
轻拍

t(simplify2array(rapply(res_list, function(x) x@test$statistic, how = "list")))
#  jarqueberaTest shapiroTest lillieTest
#a 0.9917054      0.967086    0.08837058
#b 0.1421776      0.9806379   0.1261927 

我编辑了这篇文章。希望它现在可以复制。也许
unname(rappy(res_列表,函数(x))x@test$statistic))
谢谢,我认为罗兰的函数更符合您的期望。我没有太注意矩阵输出。