问题
I am not able to resolve the issue that when lm(sformula)
is executed, it does not show the string that is assigned to sformula
. I have a feeling it is generic way R handles argument of a function and not specific to linear regression.
Below is the illustration of the issue through examples. Example 1, has the undesired output lm(formula = sformula)
. The example 2 is the output I would like i.e., lm(formula = "y~x")
.
x <- 1:10
y <- x * runif(10)
sformula <- "y~x"
## Example: 1
lm(sformula)
## Call:
## lm(formula = sformula)
## Example: 2
lm("y~x")
## Call:
## lm(formula = "y~x")
回答1:
How about eval(call("lm", sformula))
?
lm(sformula)
#Call:
#lm(formula = sformula)
eval(call("lm", sformula))
#Call:
#lm(formula = "y~x")
Generally speaking there is a data
argument for lm
. Let's do:
mydata <- data.frame(y = y, x = x)
eval(call("lm", sformula, quote(mydata)))
#Call:
#lm(formula = "y~x", data = mydata)
The above call()
+ eval()
combination can be replaced by do.call()
:
do.call("lm", list(formula = sformula))
#Call:
#lm(formula = "y~x")
do.call("lm", list(formula = sformula, data = quote(mydata)))
#Call:
#lm(formula = "y~x", data = mydata)
来源:https://stackoverflow.com/questions/38558523/showing-string-in-formula-and-not-as-variable-in-lm-fit