我正在嘗試使用“for 回圈”撰寫一個函式,從 2 個 csv.files 中提取一列的資料,并計算出這些資料的平均值。我想知道為什么需要將 for 回圈的輸出分配為空向量 c() 才能使函式作業?我列印了“for 回圈”字串的子輸出以找出原因。當我試圖排除means<-c()時,每次回圈時我都得到了意外的1,2,3,4,5,6“means”。任何人都可以為我的困惑做一個解釋嗎?非常感謝你。
pollutantmean <- function(directory, pollutant, id = 1:332) {
means<-c()
for(monitor in id){
path <- paste(getwd(), "/", directory, "/", sprintf("d", monitor), ".csv", sep = "")
monitor_data <- read.csv(path)
interested_data <- monitor_data[pollutant]
means <- c(means, interested_data[!is.na(interested_data)])
print(monitor_data)
print(means)
print(interested_data)
}
mean(means)
}
pollutantmean("specdata", "sulfate", 1:2)
使用分配方法正確輸出<-c()

在“for回圈”之前沒有means<-c()的錯誤輸出

我想我找到了問題的本質,我不明白背后的邏輯:
> x=c(x,1)
> x
>[1] 9 1
> x=c()
> x=c(x,1)
> x
>[1] 1
它可以代表一個 for 回圈,就像回圈的第一輪。我很困惑在上面兩次運行的每個程序中如何分配 x 的值,為什么第一個給出 9,1 的輸出,而第二個給出預期的結果?有沒有人能夠解釋這兩次運行背后發生了什么?真的很感謝有人能解答。
uj5u.com熱心網友回復:
在不起作用的情況下,您仍然可以使用該行
means <- c(means, interested_data[!is.na(interested_data)])
指的是means右手邊。如果您沒有設定means <- c(),那么您將獲得不同的結果,具體取決于在執行此代碼之前存盤在該變數中的內容。如果沒有這樣的變數,你會得到一個錯誤。
順便說一句,這不是撰寫 R 代碼的好方法,即使是使用means <- c()行也是如此。問題是每次執行上面的行時,您都需要制作一個稍長的向量來保持均值。在您的情況下,您不知道要添加多少個值,所以這是情有可原的,但在更常見的情況下,您總是會再添加一個條目,將結果向量設定為提前正確的長度并使用類似的東西分配值
means[i] <- newValue
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/402089.html
上一篇:KOTLIN-For回圈引數不支持函式-尋找替代方案
下一篇:正則運算式匹配/中斷
