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)' 給了我想要的結果。 –