使用for循环在R中使用manova? anova_test
首先,您不需要将整个数据传递到使用for循环在R中使用manova? anova_test,r,for-loop,R,For Loop,首先,您不需要将整个数据传递到anova_test函数中,因为您已经在两个块中传递了它 然后在建模行中,您需要提供实际数据,而不仅仅是列名,并且不需要指定数据集,因为您已经提供了数据 例如: 最后,我不知道你为什么想要这么多这样的成对manova,也许有更好的方法来做你想做的事情(从统计学上讲)考虑用expand.grid捕获两组列名的所有可能组合,然后用Map调用一个元素循环(包装到mappy)而不是三级嵌套的for循环,这些循环不会将结果保存到任何对象 res <- manova(c
anova_test
函数中,因为您已经在两个块中传递了它
然后在建模行中,您需要提供实际数据,而不仅仅是列名,并且不需要指定数据集,因为您已经提供了数据
例如:
最后,我不知道你为什么想要这么多这样的成对manova,也许有更好的方法来做你想做的事情(从统计学上讲)考虑用
expand.grid
捕获两组列名的所有可能组合,然后用Map
调用一个元素循环(包装到mappy
)而不是三级嵌套的for
循环,这些循环不会将结果保存到任何对象
res <- manova(cbind(get(colnames(dataOne)[i]), get(colnames(dataOne)[k])) ~ get(colnames(dataTwo)[j]), data = dataSet)
在循环中你有res,然后你调用summary(res.man)。。也许您先尝试修复此问题,看看错误是否仍然存在?
Error in `[[<-.data.frame`(`*tmp*`, i, value = 1:2) :
replacement has 2 rows, data has 1
De plus : Warning message:
In storage.mode(v) <- "double" :
Error in `[[<-.data.frame`(`*tmp*`, i, value = 1:2) :
replacement has 2 rows, data has 1
res <- manova(dataOne[,c(i,k)] ~ dataTwo[,j])
res <- manova(cbind(get(colnames(dataOne)[i]), get(colnames(dataOne)[k])) ~ get(colnames(dataTwo)[j]), data = dataSet)
# BUILD DATA FRAME OF ALL POSSIBLE COMBINATIONS
params_df <- expand.grid(cat1 = c("age", "child", "balance", "previous"),
cat2 = c("age", "child", "balance", "previous"),
quant = c("job", "marital", "education", "default",
"housing", "loan", "contact", "month"))
# REMOVE ROWS WHERE CATEGORIES ARE THE SAME
params_df <- subset(params_df, cat1 != cat2)
# USER-DEFINED METHOD TO CALL manova WITH DYNAMIC FORMULA AND RESULTS
anova_test <- function(dataSet, cat1, cat2, quant) {
frml <- as.formula(paste0("cbind(", cat1, ",", cat2, ") ~ ", quant))
res.man <- manova(frml, data = dataSet)
res.list <- list(estimates = summary(res.man),
aov = summary.aov(res.man))
return(res.list)
}
# RETREIVE DATA
D <- apply_impute(data)
# BUILD LIST OF MANOVA RESULTS
manova_list <- Map(anova_test,
cat1 = params_df$cat1,
cat2 = params_df$cat2,
quant = params_df$quant,
MoreArgs = list(dataSet = D))
# DISPLAY SELECT RESULTS BY INDEX AND NAMES
manova_list[[1]]$estimates
manova_list[[1]]$aov
manova_list[[2]]$estimates
manova_list[[2]]$aov
# ...
# DISPLAY ALL RESULTS
lapply(manova_list, `[[`, "estimates")
lapply(manova_list, `[[`, "aov")