【发布时间】:2021-09-29 00:01:59
【问题描述】:
我有一个循环遍历公式列表(其中包括我的输入数据的不同变量)并在我的数据上运行 adonis 函数。
此循环输出一个数据框,其中包含公式中每个变量的 R 平方和 p 值,由阿多尼斯在 PERMANOVA 分析中计算得出。
如何保存每次迭代生成的数据框(即每个公式?)
示例数据:
sampleID <- c("ID1", "ID2", "ID3", "ID4", "ID5")
variables <- c("stage", "type", "treatment")
n <- length(variables)
id <- unlist(lapply(1:n, function(i)combn(1:n,i,simplify=FALSE)),recursive=FALSE)
formulas <- sapply(id,function(i) paste("data~",paste(variables[i],collapse="+")))
stage <- c(1,2,2,3,3)
type <- c("cancer", "dysplasia", "dysplasia", "cancer", "cancer")
treatment <- c("yes", "no", "yes", "no", "no")
metadata <- data.frame(cbind(sampleID, stage, type, treatment))
data <- data.frame(sampleID, X = sample(1:5), Y = sample(1:5), Z = sample(1:5), A = sample(1:5))
data <- data.matrix(data)
这是循环:
library(vegan)
adonis_test <- for (i in 1:length(formulas)){
z = adonis(as.formula(formulas[i]) , data=metadata)
return(data.frame(name = rownames(z$aov.tab), R2 = z$aov.tab$R2, 'Pr(>F)' = z$aov.tab$'Pr(>F)')[1,])}
【问题讨论】:
-
您没有包含
adonis的代码,因此无法重现 -
为什么不在每次迭代后为其创建一个空的
dataframe和rbind? -
@JasonMathews,这是个坏主意,imo。向
data.frame迭代地添加行对一个或两个来说效果很好,但重复这样做会很差(参见The R Inferno 中的“Chapter 2: Growing Objects”)。 -
感谢您的信息
标签: r dataframe function loops