背景關系:我有一個函式,它將創建的物件stats::lm()作為其主要引數。這個函式的目標是只用這個lm物件制作 ggplots。警告:模型中使用的變數不是函式的引數,即如果模型是lmobj <- lm(y ~ x, data = df),則函式僅lmobj作為引數。確實,它與這樣的問題不同。此外,我不是在尋找獲取原始資料并計算回歸線和散點圖(例如 ggplot2::geom_smooth(method = "lm"))的“僅 ggplot”解決方案。
問題: ggplot() geom 函式有一個xandy引數,需要不帶引號的變數(參見參考手冊);我怎樣才能從中恢復這些lmobj?
預期輸出:
library(ggplot2)
lmobj <- lm(Petal.Width ~ Petal.Length, data = iris)
myfun <- function(.lm) {
# make a scatterplot with .lm using ggplot
ggplot(data = .lm[["model"]], aes(x = Petal.Width, y = Petal.Length))
geom_point()
}
myfun(lmobj)

試驗和錯誤
我試圖從lmobject使用中獲取一個未加引號的變數名cat():
> cat(names(lmobj[["model"]][2]))
Petal.Length
但它會產生一個錯誤:
> myfuntest <- function(.lm) {
# make a scatterplot with .lm using ggplot
ggplot(data = .lm[["model"]], aes(x = cat(names(.lm[["model"]][2])),
y = cat(names(.lm[["model"]][1]))))
geom_point()
}
> myfuntest(lmobj)
Petal.LengthPetal.WidthPetal.LengthPetal.WidthError: geom_point requires the following missing aesthetics: x and y
uj5u.com熱心網友回復:
以下作品:
myfun <- function(model) {
coefs <- names(model$model)
ggplot(data = model$model)
aes(x = !! rlang::sym(coefs[1L]), y = !! rlang::sym(coefs[2L])))
geom_point()
}
這里的相關點是aes使用 'rlang's tidy 評估,因此需要將引數作為名稱注入。!!
uj5u.com熱心網友回復:
一種方法是首先評估aesas 符號的引數,然后aes通過將其包裝成do.call
myfun <- function(.lm) {
ggplot(data = .lm[["model"]],
do.call(aes, list(x = sym(names(.lm[["model"]])[2]),
y = sym(names(.lm[["model"]])[1]))))
geom_point()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/450755.html
