【发布时间】:2018-09-30 08:24:16
【问题描述】:
如何在 R 中将公式作为参数传递?
下面的代码适用于前两种情况,但是当我传入公式时,我得到一个错误:Error in model.frame.default(formula = formula, weights = weights, na.action = na.omit, : invalid type (closure) for variable '(weights)'
makeModel<-function(formula,weights) {
m <- lm(formula, na.action = na.omit, weights = weights)
return(m);
}
run<-function(t) {
f<-formula(t$y~t$x+t$r)
m <- lm(t$y~t$x+t$r, na.action = na.omit, weights = t$size)
m <- lm(f, na.action = na.omit, weights = t$size)
m <- makeModels(f,t$size)
}
l<-20
x<-seq(0,1,1/l)
y<-sqrt(x)
r=round(runif(n=length(x),min=0,max=.8))
n<-1:(l+1)
size=n/sum(n)
t<-data.frame(x,y,r,n,size)
run(t)
编辑1:这段代码:
makeModel<-function(formula,weights,t) {
print(class(weights))
m <- lm(formula, na.action = na.omit, weights = weights,data=t)
return(m);
}
run<-function(t) {
f<-formula(y~x+r)
f <- as.formula("t$y~t$x+t$r")
m <- lm(y~x+r, na.action = na.omit, weights = t$size,data=t)
m <- lm(f, na.action = na.omit, weights = t$size,data=t)
m <- makeModel(f,t$size,t)
}
产生:
model.frame.default 中的错误(公式 = 公式,数据 = t,权重 = 权重,: 变量“(权重)”的无效类型(闭包)
编辑 2:作品:
makeModel <- function(formula, data) {
# size is looked in data first, which is why this works
m <- lm(formula, na.action = na.omit, weights = size, data = data) # works
#m <- lm(formula, na.action = na.omit, weights = data$size, data = data) # fails!
return(m)
}
r 很奇怪!
有谁知道为什么: weights=data$size 行失败?
编辑 3:得到:weights=data$size 起作用。
makeModel<-function(formula,w,data) {
print(class(weights))
m <- lm(formula, na.action = na.omit, weights = size, data = data) # works
m <- lm(formula, na.action = na.omit, weights = data$size, data = data) #works
m <- lm(formula, na.action = na.omit, weights = w,data=data) # fails
return(m);
}
run<-function(data) {
f<-formula(y~x+r)
#f <- as.formula("t$y~t$x+t$r")
m <- lm(y~x+r, na.action = na.omit, weights = data$size,data=data)
m <- lm(f, na.action = na.omit, weights = data$size,data=data)
m <- makeModel(f,data$size,data)
}
最后一个失败并显示: eval 中的错误(extras,data,env):找不到对象 'w'
【问题讨论】:
-
似乎不起作用。见编辑
-
关于您的新问题,请查看我的帖子,我强调您分配公式的环境会有所不同。
-
是的,但很难理解。我错过了关于使用 t 的部分。