У меня есть список с довольно сложной структурой, из которой я хочу извлечь только несколько конкретных значений. Поскольку 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
Возможно, 'igname (rapply (res_list, function (x) x @ test $ statistic))' – akrun
Спасибо, я думаю, что функция Роланда больше соответствует вашему ожидаемому. Я не обращал много внимания на вывод матрицы. – akrun