0
我有一个调用对象,我想添加一个参数,并且我不想使用解析方式this answer does。更改“调用”对象中的参数
所以,说我有一个lm
对象,所以从lm
lma <- lm(mpg ~ cyl, data=mtcars)
lma$call
# lm(formula = mpg ~ cyl, data = mtcars)
现在的口号,说我想补充的说法,weights=wt
,使用呼叫。我意识到有一个非常简单的方法来创建一个新的通话,但我想知道我是否可以使用一个通话对象。也有编辑weights
如果它已经在那里
lmb <- lm(mpg ~ cyl, data=mtcars, wei=wt)
cl <- lmb$call
wtpos <- which.max(pmatch(names(cl), "weights"))
cl[[wtpos]] <- mtcars$qsec
eval(cl)
但因为在lma$call
没有权重的说法,这将不会对lma$call
工作的方式。
所以,感觉就像我应该能够通过添加另一个元素来简单地“增长”这个调用,但是我不知道该怎么做。例如,下面的失败:
cl <- lma$call
cl <- c(cl, weights=quote(wt))
eval(cl)
# [[1]]
# lm(formula = mpg ~ cyl, data = mtcars)
#
# $weights
# wt
,我就希望得到的结果是一个新的“LM”对象等于lmb
,不只是一个列表。
尽管有一种解决方法,那就是不使用解析(修改lm的副本使wt =权重为缺省值similar to in this solution),这同样不涉及编辑调用对象。
感谢您的提示。在Wickham的Advanced R下的Expressions:Calls:修改一个调用(在线地址为http://adv-r.had.co.nz/Expressions.html#calls),寻找这个结果将导致更简单的解决方案。 'cl < - lma $ call; cl $ weights < - quote(wt); eval(cl)' 给了我想要的结果。 –