我想概括我的函数。我已经定义了form = y~x
,并且想要调用y以便在函数中使用它。 y应该是用户(动态)定义的,这就是我需要一种从表单中调用它的方法。这是我尝试过的代码的一部分,newdata是在函数中计算的。
form = y ~ x
newdata = y
trial = function(form, x){
y = newdata
reg = lm(form, data = data.frame(x, newdata))
reg
}
答案 0 :(得分:1)
如果您希望您的功能正常工作,您可以尝试:
form = y ~ x
newdata = 3*(1:100)+2
trial = function(f=form, x){
y = newdata
reg = lm(f, data = data.frame(x, y=newdata))
reg
}
trial(x=1:100) # or trial(form,1:100)
Call:
lm(formula = f, data = data.frame(x, y = newdata))
Coefficients:
(Intercept) x
2 3 # as expected
在您之前的函数中,我们认为form
是一个参数而R不理解它是您定义的form
。使用默认值f
的{{1}}可以解决此问题。
那是你想要的吗?
请注意,如果您想调用该函数并在通话中定义form
,您可以这样做:
y
根据我的评论,你可能更接近你的预期:
form = y ~ x
trial = function(f=form, x, y){
reg = lm(f, data = data.frame(x, y))
reg
}
trial(x=1:100,y=3*(1:100)+2)
Call:
lm(formula = f, data = data.frame(x, y))
Coefficients:
(Intercept) x
2 3
您调用指定form = y ~ x
trial = function(f=form, x, y){
y = 5*y+2
reg = lm(f, data = data.frame(x, y))
reg
}
trial(x=1:100,y=3*(1:100))
Call:
lm(formula = f, data = data.frame(x, y))
Coefficients:
(Intercept) x
2 15
的函数并为x
提供“第一个值”。然后,在函数中,y
被转换(这里非常简单的转换),然后完成回归。
请注意,当您调用该函数时,y
不是变量y
,而是函数中的参数。如果您的变量y
等于z
,则可以执行3*(1:100)
答案 1 :(得分:0)
我试过这个,结果证明是我需要的
form = y ~ x
trial = function(form, x){
.
.
.
newdata = something
.
.
new.form <- as.formula(call("~", form[[2]], form[[3]]))
assign(deparse(form[[2]]), newdata)
reg = lm(new.form, data = data.frame(x, newdata))
reg
}
答案 2 :(得分:-1)
这样的东西?
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
weight <- c(ctl, trt)
lm(weight ~ group)
form <- as.formula(y ~ x)
trial = function(form,y, x){
reg = lm(form, data = data.frame(x=x, y=y))
reg
}
trial(form,weight,group)