循环遍历我的所有数据帧

时间:2014-06-11 15:31:50

标签: r

我想为数据帧做一个循环 我只能为一个数据帧执行此操作,这是我的代码:

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)
}

3 个答案:

答案 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)