2017-04-04 22 views
0

これで何時間も移動していました。私の最初の質問はR.にオンラインですループを含む関数を作成しようとしています。この関数は、ユーザーがpollutantmean(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

機能に戻り値がありません。 – Roland

答えて

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を意味しました:(...答えを受け入れるとマークするには、答えの横のチェックマークをクリックして、

+0

お返事ありがとうございました!それは興味深いことですが、Rはファイルの先頭を表示するので(ファイル全体を印刷するとは思えませんが、ループの最初の繰り返しだけであると思われます)、allfilesファイルを "ビルド"しません。 – Pepe

+0

@ペペ私の答えは助けた?私はあなたのコメントからそれを得ていませんでした。もしそれを受け入れることを検討して.. – minem

+0

それは間違いなく助け!私が学ぶことができるように間違っていることを見つけることにも非常に興味があります。あなたの時間のために多くのおかげで! – Pepe

0

は、関数のreturnている最後の行必要はありませんでもlapplydo.call考えてみましょう:

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

ありがとう!私はそれを試みます。なぜ私がやったことがうまくいかないのだろうと思っていた。私は引数 "id"が関数に渡されている方法だと思います。しかし、正確に何が問題なのか把握することができます。 – Pepe

0

[OK]を、私はそれを得ました。私は実際に作成され、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) 
+0

申し訳ありませんが、あなたは私の答え(http://stackoverflow.com/a/43209515/7063375)に加えられた変更に気がつきましたか? – minem

関連する問題