我想为数据帧做一个循环 我只能为一个数据帧执行此操作,这是我的代码:
d <- list(d1,d2,d3,d4,d5)
for (j in 1:length(d1) ) {
avg[j] = mean(d1[,j], na.rm=TRUE)
ecart[j]=sd(d1[,j], na.rm=TRUE)
}
答案 0 :(得分:1)
你应该使用lapply
并避免每个副作用的for
循环(在循环之前不需要预先分配):
lapply(d,get_stats) ## loops over list of data.frames
我将你的功能定义为:
get_stats <-
function(d)
c(colMeans(d, na.rm=TRUE), ## I vectorize your loop here
sapply(d,sd,na.rm=TRUE)) ## avoid a for loop again here
答案 1 :(得分:0)
你应该循环通过d而不是d1,不是吗?
也许是这样的:
for(j in 1:length(d)){
avg = apply(d[[j]], 2, function(x) mean(x, na.rm=TRUE))
ecart = apply(d[[j]], 2, function(x) sd(x, na.rm=TRUE))
}
答案 2 :(得分:0)
您可以在函数中编写代码并调用lapply
d <- list(d1,d2,d3,d4,d5)
f <- function (d) {
for (j in 1:length(d1) )
avg[j] = mean(d1[,j], na.rm=TRUE)
ecart[j]=sd(d1[,j], na.rm=TRUE)
}
lapply(d, f)