在 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
。使用具有默认值 form
的 f
可以解决此问题。
那是你想要的吗?
请注意,如果您想调用该函数并在调用中定义 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
}
我想概括我的函数。我已经定义了 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
。使用具有默认值 form
的 f
可以解决此问题。
那是你想要的吗?
请注意,如果您想调用该函数并在调用中定义 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
}