英文:
How to do a loop over a colnames of data frames stored in a list in r
问题
我正在尝试对存储在列表上的多个数据框的列执行贝塔回归。列表中存储的数据框来自两个数据框,一个包含因变量,另一个包含自变量(环境因素)。随后,我将从多个表格获取的列粘贴到环境数据框以执行回归。
环境数据框
Ev = data.frame(a = runif(20, 1, 999), b = runif(20, 1, 7000), c = runif(20, 1, 3000), d = runif(20, 1, 250))
生物指数数据框
Index = data.frame(Pielou = runif(20, 0, 1), Simpson = runif(20, 0, 1), LCBD = runif(20, 0, 1), Q = runif(20, 0, 0.8), D = runif(20, 0, 0.6))
在这里,我将每个生物列粘贴到环境数据框中。
LT = list()
for(i in seq_along(Index)){
LT[[i]] = data.frame(Index[,i], Ev)
}
然后,我执行了回归。
Ldf1 = list()
LBM1 = list()
for(i in seq_along(LT)){
LBM1[[i]] = betareg(LT[[i]][[1]] ~ LT[[i]][[i+1]])
Ldf1[[i]] = summary(LBM[[i]])
}
然而,循环只为我提供了第一个数据框的四个结果。
英文:
I'm seeking to conduct a beta regression across columns of multiple data frames stored on a list. The data frames stored in the list are from two data frames, one containing dependent factors and another containing independent variables (environmental). Subsequently, I pasted a column to environmental data frames acquired from multiple tables to carry out the regression.
Environmental data frame
Ev = data.frame(a = runif(20,1,999), b = runif(20,1,7000), c = runif(20,1,3000), d = runif(20, 1, 250)))
Biotic index data frame
Index = data.frame(Pielou = runif(20,0,1), Simpson = runif(20,0,1), LCBD = runif(20, 0, 1), Q = runif(20, 0, 0.8), D = runif(20,0,0.6))
Here I pasted each Bio column in environmental df.
LT = list()
for(i in seq_along(Index)){
LT[[i]] = data.frame(Index[,i], Ev)
}
Then, I performed the regression.
Ldf1 = list();LBM1 = list()
for(i in seq_along(LT)){
LBM1[[i]] = betareg(LT[[i]][[1]] ~ LT[[i]][[i+1]])
Ldf1[[i]] = summary(LBM[[i]])
}
However, the loop only provided me with four results of the first data frame.
答案1
得分: 1
Ldf1 = vector("list", length(LT) * length(Ev))
LBM1 = vector("list", length(LT) * length(Ev))
idx = 1
for(i in seq_along(LT)){
for(j in seq_along(Ev)){
LBM1[[idx]] = betareg(LT[[i]][1] ~ LT[[i]][[j]])
Ldf1[[idx]] = summary(LBM1[[idx]])
idx = idx+1
}
}
英文:
I hope this works for you.
Ldf1 = vector("list", length(LT) * length(Ev))
LBM1 = vector("list", length(LT) * length(Ev))
idx = 1
for(i in seq_along(LT)){
for(j in seq_along(Ev)){
LBM1[[idx]] = betareg(LT[[i]][[1]] ~ LT[[i]][[j]])
Ldf1[[idx]] = summary(LBM1[[idx]])
idx = idx+1
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论