老实说,我不确定标题是否准确地描述了发生了什么,但是在这里。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