![](/img/trans.png)
[英]R code: How can I extract a column from a list of tibbles and use it as a parameter for functions?
[英]How to extract a parameter from a list of functions in a loop
我有一個大數據集,我想一次執行幾個函數並為每個參數提取一個參數。
測試數據集:
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)
}
mynormtest(testdf)
我獲得了每個分組變量的測試摘要列表。 但是,我只對獲取參數“STATISTIC”感興趣,我沒有設法找出如何提取它。
您可以使用以下命令在各種測試的輸出中獲取存儲為“ STATISTIC”的值:
res_list <- mynormtest(testdf)
res_list$a$shapiroTest@test@statistic
res_list$a$jarqueberaTest@test@statistic
res_list$a$lillieTest@test@statistic
並對應於集合b:
res_list$b$shapiroTest@test$statistic
res_list$b$jarqueberaTest@test$statistic
res_listb$lillieTest@test$statistic
希望這可以幫助。
關於函數fgetparam
我認為這是一個不錯的起點。 這是我的建議,並做了一些小的修改:
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)
}
從允許任意數量的觀察值的角度來看,此函數代表一個較小的概括,而在您的情況下,這固定為a和b這兩種情況。 當然可以進一步縮短代碼,但隨后也可能變得更加晦澀難懂。 我相信,在開發代碼時,一方面保持有效性和緊湊性,另一方面保持可讀性或易理解性,這是有好處的。
正如@akrun和@Roland所指出的那樣 ,函數getparams2()
可以用更優雅,更短的形式編寫。 一種可能性是
getparams2 <- function(myp) {
matrix(unname(rapply(myp, function(x) x@test$statistic)),ncol=3)}
另一個不錯的選擇是
getparams2 <- function(myp){t(sapply(myp, sapply, function(x) x@test$statistic))}
我編寫了第二個函數以矩陣形式獲取統計信息。 理想情況下,我想將兩個功能結合在一起。 我考慮過愉快,但尚未找到解決方案。
fgetparam <- function(myp){
p_mat <- matrix(NA, nrow=2, ncol=3)
for(i in 1:2){
for(j in 1:3 ){
p_mat[i,j] <- myp[[i]][[j]]@test$statistic
}
}
return(p_mat)
}
fgetparam(res_list)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.