在r中调用公式中的变量

时间:2015-11-13 09:51:33

标签: r formula

我想概括我的函数。我已经定义了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
}

3 个答案:

答案 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)