为我的所有数据帧循环[关闭]

问题描述 投票:-1回答:3

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

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)
}
r
3个回答
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

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

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)
© www.soinside.com 2019 - 2024. All rights reserved.