我不明白是什么让不同的案例起作用或不起作用。我本来希望他们都能明显地工作。
- 由于某种原因,funs2 和 funs4 仅接近 n 的最后一个值:它们的行为就好像 n 始终为 5。
- funs3 捕获序列的每个元素:它的行为就像 n 从 1 到 5 枚举,并将每个 n 映射到不同的函数,这将以不同的方式近似数据集(随着自由度的增加)
该脚本应该可以直接在 R 中运行,除了 plyr 之外没有依赖关系。
有什么线索吗?
library(plyr)
f <- function (x) { sin(2*pi*x) }
fnoisy <- function (x) {f(x) + 0.3*rnorm(1)}
x10 <- runif(10)
y10 <- aaply(x10,1,fnoisy)
curve(f,0,1,col="blue", ylim=c(-1.5,1.5))
points(x10, y10, col="red")
vdm <- function(x,n) outer( x, seq(0,n-1), "^" )
fitted <- function (n) { function(xtrain,ytrain) { w <- qr.solve(vdm(xtrain,n), ytrain)
function (x) { vdm(x,n) %*% w} } }
funs2 <- lapply(seq_len(5), function(n) {fitted(n)}) #does not work
funs3 <- lapply(seq_len(5), function(n) {print(n);fitted(n)}) #works
funs4 <- lapply(seq_len(5), fitted ) #does not work
lapply(funs3, function(f) {ffitted <- f(x10,y10)
curve(ffitted,0,1,col="black", add=TRUE)})