私はプログラミングの初心者であり、指定されたモニターのリスト全体の汚染物質(硝酸塩または硫酸塩)の平均を計算する関数をRで作成しようとしています各モニタは "specdata"というフォルダに独自の.csvファイルがあります)。私は次の関数を構築している:R:警告:私の関数を使用しようとするとNAを取得する
pollutantmean <- function(directory="specdata", pollutant="sulfate", id=1:332)
{
files_f<-list.files(directory,full.names=TRUE)
d <- data.frame()
for(i in 1:332){
d <- rbind(d,read.csv(files_f[i]))
}
if(pollutant=="sulfate"){
mean(d$Sulfate[which(d$ID==id)], na.rm=TRUE)
}
else{
mean(d$Nitrate[which(d$ID==id)], na.rm=TRUE)
}
}
をそして私はとの機能をテストしてみました:私は、次のエラーを取得する pollutantmean(directory="specdata",pollutant="sulfate", id=1:10)
:
[1] NA Warning messages:
1: In d$ID == id :
longer object length is not a multiple of shorter object length
2: In mean.default(d$Sulfate[which(d$ID == id)], na.rm = TRUE) :
argument is not numeric or logical: returning NA
これは何を意味するのでしょうか?私はコードを何度も繰り返してきましたが、問題の内容を特定することはできません。
ありがとうございます。
は、(1)あなたのコードは 'files_f [i]は'を参照して、「その範囲外に到達」され、この範囲違反は避けるべきで幸運; (2)あなたは 'id:'と 'for'ループの両方に' 1:332'をハードコードしていますが、それは意図的ですか? (3)あなたの問題は、長さの異なる2つのベクトルを比較しているためです(両方とも1より大きい)。結果が '1:4 == 1:3'にあると提案するものは何ですか? (これは明らかに「1:4 == 1」と「1 == 1:3」ですが、両辺はベクトルではありません) – r2evans
(4)[このCourseraのトピックは死にました](https:// stackoverflow.com/search?q=%5Br%5D+pollutantmean) –
rich ...あなたは#4あなたの宿題のあなたの不正行為に私を打つ! – sconfluentus