我有一个从校准中获得X和Y值的数据集,我必须使用预定义的多项式函数列表对它们进行插值,并选择具有最佳R2的那个。 最愚蠢的功能应该是
try<-function(X,Y){
f1<- x + I(x^2.0) - I(x^3.0)
f2<- x + I(x^1.5) - I(x^3.0)
...
f20<- I(x^2.0) - I(x^2.5) + I(x^0.5)
r1<- lm(y~f1)
r2<- lm(y~f2)
...
r20<-lm(y~f20)
v1<-summary(r1)$r.squared
v2<-summary(r2)$r.squared
...
v20<-summary(r20)$r.squared
v<-c(v1,v2,...,v20)
return(v)
}
我希望这个功能更短更智能(特别是从r1的定义到结尾)。我还想让用户在f1到f20中选择一个函数(键入所需的 v 行号)并查看函数输出 print 和情节就可以了。
拜托,你能帮帮我吗? 谢谢。
@mso:使用sapply的想法很好但不幸的是,这样我不使用多项式进行回归:我的x向量根据公式在f1向量中转换,然后用于回归。我只获得一个参数而不是3个(在这种情况下)。
答案 0 :(得分:4)
将F创建为列表并继续:
F = list(f1, f2, ...., f20)
r = sapply(F, function(x) lm(y~x))
v = sapply(r, function(x) summary(x)$r.squared)
return v
sapply将获取F的每个元素并使用y执行lm并将结果放入向量r中。在下一行中,sapply将获取r的每个元素并获得摘要并将结果放入向量v。希望它应该有效。你也可以尝试非常相似的lapply(而不是sapply)。