循环在功能之外工作,但在功能中它不起作用。

时间:2017-04-04 13:57:01

标签: r function loops

此事已经持续了好几个小时。我在线上的第一个问题R.尝试创建一个包含循环的函数。该函数采用用户在污染物(4:6)中提交的向量,然后加载一堆csv文件(在提到的目录中)并绑定它们。奇怪(对我来说)是如果我分配变量id然后在不使用函数的情况下运行循环,它就可以工作!当我把它放在一个函数中,以便用户可以提供id向量时,它什么都不做。有人可以帮忙吗?谢谢!!!

pollutantmean<-function(id=1:332) 
       {
      #read files
      allfiles<-data.frame()
      id<-str_pad(id,3,pad = "0")
      direct<-"/Users/ped/Documents/LearningR/"
              for (i in id) {
               path<-paste(direct,"/",i,".csv",sep="")
               file<-read.csv(path)
               allfiles<-rbind(allfiles,file)
                             }
       }

3 个答案:

答案 0 :(得分:0)

您的函数缺少返回值。 (@Roland)

pollutantmean<-function(id=1:332) {
  #read files
  allfiles<-data.frame()
  id<-str_pad(id,3,pad = "0")
  direct<-"/Users/ped/Documents/LearningR/"
          for (i in id) {
           path<-paste(direct,"/",i,".csv",sep="")
           file<-read.csv(path)
           allfiles<-rbind(allfiles,file)
                         }
 return(allfiles)
   }

编辑: 你的错误是你没有在你的函数中指定你想从函数中得到什么。在R中,您在函数内部创建对象(您可以将其想象为不同的环境),然后指定要返回的对象。

关于接受我的回答的评论,我的意思是this :( ...要将答案标记为已接受,请点击答案旁边的复选标记,将其从灰色显示切换为填写... )。

答案 1 :(得分:0)

即使是lapplydo.call,也不需要return作为最后一行功能:

pollutantmean <- function(id=1:332) {    
  id <- str_pad(id,3,pad = "0")
  direct_files <- paste0("/Users/ped/Documents/LearningR/", id, ".csv")

  # READ FILES INTO LIST AND ROW BIND
  allfiles <- do.call(rbind, lapply(direct_files, read.csv))
}

答案 2 :(得分:0)

好的,我明白了。我期待构建的文件实际上是在R的环境中创建并显示的。但由于某些原因,它们没有。但R仍然做所有的计算。非常感谢你的回复!!!!

pollutantmean<-function(directory,pollutant,id) 
{
  #read files
  allfiles<-data.frame()
  id2<-str_pad(id,3,pad = "0")
  direct<-paste("/Users/pedroalbuquerque/Documents/Learning R/",directory,sep="") 
  for (i in id2) {
    path<-paste(direct,"/",i,".csv",sep="")
    file<-read.csv(path)
    allfiles<-rbind(allfiles,file)
  }
#averaging polutants 
mean(allfiles[,pollutant],na.rm = TRUE)
}

pollutantmean("specdata","nitrate",23:35)