在 r 的公式中调用变量

Calling Variables in a Formula in r

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

如果你想让你的函数正常工作,你可以试试:

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。使用具有默认值 formf 可以解决此问题。

那是你想要的吗?

请注意,如果您想调用该函数并在调用中定义 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 提供 "first value"。然后,在函数中,y被转换(这里很容易转换),然后回归。

注意,调用函数时,y不是变量y,而是函数中的参数。如果你有一个变量 z 等于 3*(1:100) 你可以做 trial(x=1:100,y=z)

是这样的吗?

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)

我试了一下,结果是我需要的

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
}