这里是一个例子:
在上面的示例中,使用
这里是用R编写的
require(Rcpp)
require(RcppArmadillo)
require(zoo)
require(repmis)
myData <- source_DropboxData(file = "example.csv",
key = "cbrmkkbssu5bn96", sep = ",", header = TRUE)
dolm = function(x) coef(fastLmPure(as.matrix(x[,2]), x[,1]))
myCoef = rollapply(myData, 260, dolm, by.column = FALSE)
summary(myCoef) # 80923 NA's
dolm2 = function(x) coef(fastLm(x[,1] ~ x[,2] + 0, data = as.data.frame(x)))
myCoef2 = rollapply(myData, 260, dolm2, by.column = FALSE)
summary(myCoef2) # 0 NA's
在上面的示例中,使用
fastLmPure
的第一种方法会在输出中产生NAs,而使用fastLm
的第二种方法则不会。这里是用R编写的
fastLm
和fastLmPure
函数的链接:
https://github.com/RcppCore/RcppArmadillo/blob/master/R/fastLm.R
这里是链接到底层的C ++编写的fastLm
函数:
https://github.com/RcppCore/RcppArmadillo/blob/master/src/fastLm.cpp
从这些链接和RcppArmadillo文档来看,我不清楚是什么原因导致输出结果不同?为什么第二个输出没有NAs?最重要的问题是,哪个例程/代码部分防止了第二种方法中出现NAs,它是如何实现的?