在 R 中使用 for 循环覆盖结果

  • 本文关键字:循环 覆盖 结果 for r
  • 更新时间 :
  • 英文 :


我有许多csv文件,我的目标是找到id参数给出的一个文件或一组文件的完整案例数。我的函数应该返回一个数据框,其中列 id 指定文件和列 obs 给出此 id 的完整案例数。但是,我的函数覆盖了每个循环中nobs的先前值,并且生成的数据框仅给我最后一个值。您知道如何为每个id值获取nob的值吗?

  myfunction<-function(id=1:20) {
  files<-list.files(pattern="*.csv")
  myfiles = do.call(rbind, lapply(files, function(x) read.csv(x,stringsAsFactors = FALSE)))  
   for (i in id) {  
   good<-complete.cases(myfiles)
   newframe<-myfiles[good,]
   cases<-newframe[newframe$ID %in% i,]
   nobs<-nrow(cases)  
  }
  clean<-data.frame(id,nobs)
  clean
 }

谢谢。

我们可以在 lapply() 内完成所有操作,如下所示(未经测试):

myfunction <- function(id = 1:20) {
  files <- list.files(pattern = "*.csv")[id]
  do.call(rbind,
          lapply(files, function(x){
            df <- read.csv(x,stringsAsFactors = FALSE)
            df <- df[complete.cases(df), ]
            data.frame(ID=x,nobs=nrow(df))
            }
            )
          )  
}

最新更新