老實說,我不確定標題是否準確地描述了發生了什麼,但是在這裏。Sapply正在將矢量變成矢量矢量..我想
假設我開始用下面的對象「Tempcheck」
> str(Tempcheck)
'data.frame': 1872 obs. of 3 variables:
$ Time : POSIXlt, format: "2013-07-10 14:26:40" "2013-07-10 14:26:43" "2013-07-10 14:26:50" "2013-07-10 14:26:53" ...
$ rawTemp : int 107461 108551 109940 110258 110740 110890 111096 111164 111238 111296 ...
$ rawConductivity: int 969903 1287631 1298627 1292063 1303909 1297249 1305610 1297557 1305070 1298703 ...
我然後調用一個函數,並使用sapply標準化一些數據。
TCalibration<- function(x){ #this function normalizes data based on the calculated y intercept and slope
dc <- (x*((Tempcor[[2]])))+((Tempcor[[1]])) # y = 1/m*x + -1/b
dc <- dc[[1]]
}
##calibrates rawTemp into real temp
Tempcheck$Temp <- sapply(Tempcheck[[2]],TCalibration)
Tempcor是存儲線性模型係數的前一個對象。如果這是相關的,我可以稍後發佈。
> str(Tempcheck)
'data.frame': 1872 obs. of 4 variables:
$ Time : POSIXlt, format: "2013-07-10 14:26:40" ...
$ rawTemp : int 107461 108551 109940 110258 110740 110890 111096 111164 111238 111296 ...
$ rawConductivity: int 969903 1287631 1298627 1292063 1303909 1297249 1305610 1297557 1305070 1298703 ...
$ Temp : num 23.6 23.9 24.3 24.4 24.5 ...
這一切都很好,很棒! UNTIL ....
我調用另一個函數
ConductivityCorrection <- function(x){
t <- 1+.02*(Tempcheck$Temp-25)
EC25 <- (x/t)
}
然後sapply再次使用Tempcheck
Tempcheck$rawCEC <-sapply(Tempcheck[[3]] ,ConductivityCorrection)
我期待得到,我與上一行代碼中得到了同樣的事情,但奇怪的事情發生了。
str(Tempcheck$rawCEC)
num [1:1872, 1:1872] 998390 991974 983917 982090 979335 ...
此向量的長度是1872^2,我認爲這是奇怪的。我suspision是,它來自於線
t <- 1+.02*(Tempcheck$Temp-25)
我知道我可以做這一種不同的方式,但我試圖迫使我自己使用的申請家庭,更好地瞭解它。無論如何,任何幫助將不勝感激。謝謝!
我知道這段代碼解決了我的問題。
Tempcheck$alphaT <- 1+.02*(Tempcheck$Temp-25)
Tempcheck$rawCEC <- Tempcheck[[3]]/Tempcheck$alphaT
我一直在尋找一種方式把它變成一個功能,並適用於每個元素Tempcheck的列[[3]]
您的函數'CondictivityCorrection'不顯式返回任何東西。事實上,我認爲你對你的兩個函數都感到困惑,因爲它們返回的是什麼(如果有的話)。 – joran
這裏沒有足夠的信息來掌握_exactly_你的函數應該做什麼,但我幾乎可以肯定的是絕對沒有必要在這裏應用函數。我覺得這個應該都很容易做到矢量化。 – joran
我知道我可以對這些操作進行矢量化,但我想我會挑戰自我,想出如何正確地製作和使用功能。你會建議什麼? – ZDwhite