我有一个在测量日期的值的数据框,我需要对其进行预测/内插到大型矩阵中的新日期。目前,我正在使用approxfun()
创建新的插值函数,然后对矩阵中的每一行都使用apply()
。问题是,我的矩阵很大,apply()
和approxfun()
的速度很慢。我将在优化例程中使用它,因此速度是一个问题。同样,apply()
命令的结果将需要转换。有没有更好的方法可以对新数据的每一行进行插值预测,而无需使用apply()
或类似方法?我还拥有原始日期范围之外的新数据,因此approxfun()
可以解决此问题,但是也许还有其他选择吗?
library(microbenchmark)
# input data
Date <- c(2015, 2014.5, 2014, 2013.5, 2013, 2012.5, 2012, 2011.5, 2011)
CFC11 <- c(227.346, 228.718, 230.202, 231.419, 232.786, 234.177, 235.506, 236.463, 237.423)
Input <- data.frame(Date, CFC11)
# New Dates
Well1 <- c(2015.6, 2014.2, 2013.1)
Well2 <- c(2013.7, 2011.9, 2010)
NDates <- rbind(Well1, Well2)
NDates <- matrix(NDates, nrow = 2, ncol = 3)
# Input function
CFC11fun <- approxfun(Input$Date,Input$CFC11,rule=2)
# Apply the input function to the dates to get the input at the new dates
# rowwise
# this transposes the result, so I would need to transpose it back
t(apply(NDates,1,CFC11fun))
# looks at timing
microbenchmark(t(apply(NDates,1,CFC11fun)), times = 1000, unit = "us")
答案 0 :(得分:2)
只需在整个矩阵上调用函数,然后将结果整形为尺寸相同的矩阵即可:
matrix(CFC11fun(NDates), nrow=nrow(NDates))