0
我有一个列表,其结构相当复杂,我只想从中提取一些特定的值。由于数据和表结构的dput
输出似乎是在这种情况下有问题,我通过@这里的代码posted yesterday重现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)
对于res_list
数据,我有一个函数提取我感兴趣的值并将它们存储在矩阵中:
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)
}
此函数提供所需的输出。
> getparams2(res_list)
[,1] [,2] [,3]
[1,] 0.9917054 0.9670860 0.08837058
[2,] 0.1421776 0.9806379 0.12619274
不过,我不愉快的功能getparams2()
与其FOR
循环的风格。我很高兴知道这个函数是否可以写成更优雅更紧凑的形式。感谢您的帮助。
我编辑的职位。希望它现在是可重现的。 – RHertel
也许'unname(rapply(res_list,function(x)x @ test $ statistic))' – akrun
谢谢,我认为Roland的函数与您预期的函数更匹配。我没有太注意矩阵输出。 – akrun