は私が次のアドレスに割り当てパート2をやってる:forループの使用を減らすためにRプログラムを変更するには?
質問:zipファイルが細かい粒子状物質のための汚染監視データを含む332カンマ区切り(CSV)ファイルが含まれて (PM )大気汚染は米国の332カ所にあります。各ファイルには1つのモニターからのデータが含まれ、各モニターのID番号はファイル名に含まれています。例えば、モニタ200用のデータは、ファイル「200.csv」に含まれている。
日付:YYYY-MM-DD形式(年月日)の観測日 硫酸塩:その日の大気中の硫酸塩PMのレベル(マイクログラム/秒で測定)硝酸塩:その日の空気中の硝酸塩PMのレベル(マイクログラム/立方メートルで測定) このプログラミング割り当てのために、このファイルを解凍し、ディレクトリ 'specdata'を作成する必要があります。 zipファイルを解凍したら、 'specdata'ディレクトリのファイルを変更しないでください。各ファイルでは、硫酸塩または硝酸塩(またはその両方)が欠けている(NAとしてコード化されている)日が多いことに気付くでしょう。これは、米国の大気汚染モニタリングデータに共通しています。
パート2
ファイルの完全なディレクトリを読み込み、各データファイルの完全観察例数を報告機能を記述します。この関数は、最初の列がファイルの名前で、2番目の列が完全なケースの数であるデータフレームを返す必要があります。
complete <- function(directory="d:/dev/r/documents/specdata", id) {
df <- data.frame(no=integer(), nobs=integer())
for (i in id) {
sum=0
myfilename = paste(directory,"/",formatC(i, width=3, flag="0"),".csv",
sep="")
masterfile = read.table(myfilename, header=TRUE, sep=",")
for (j in 1:nrow(masterfile)){
if (!is.na(masterfile[j, 2]) && !is.na(masterfile[j, 3])){
sum = sum + 1
}
}
df[i,]<-c(i, sum)
}
df
}
私は、ディレクトリdの中のすべての001.csv、002.csvを、...置く注:
私のコードは次のようには/ dev/R /文書/ specdata、それはですなぜ私はこの文字列をパラメータにデフォルトとして持つのですか?あなたはこの作業をするためにネストされたforループを使用していることがわかります。少なくともforループの1つをlapplyに置き換えることができるはずです。しかし、私はC++に精通しているので、これで苦労しているので、lapplyを実装する方法は実際には分かりません。私はStackoverflowでいくつかのコードを読んで、私はそれらのほとんどを理解していますが、自分のコードを書くことになったとき、私はそれを動作させることができませんでした。
ありがとうございます!その間、私はもう一度やり直します。
ありがとうございます! Laurenはcomplete.cases()について言及し、それを最初の行に入れます。助けてくれてありがとう。 –
GoogleのためのRキーワードは 'ベクトル化'です。効率化のためにすべてのものをメモリに持っているときに役立ちますが、外部/ファイルループで絶対に必要とは思われません。また、古いSOの人々はコメントに「感謝」を入れたときに気に入らない: - 注意: – Ivan
ええ、私はいくつかの例をチェックしたが、私はC++についてはあまりにも快適だと思うので、まだ苦労している。 –