我正在嘗試ggplot2根據給定的字串選擇一個主題。出于演示目的,請考慮以下代碼:
library(dplyr); library(ggplot2)
mtcars %>%
ggplot(aes(mpg, wt))
geom_point() -> p
all_ggplot2_funs <- getNamespaceExports("ggplot2")
p
eval(parse(text=paste0(all_ggplot2_funs[grep("theme_", all_ggplot2_funs)][15],
"()")))
這很好用,可以讓我使用theme_minimal. 但是,從安全的角度來看,正如在過去關于eval-parse不同語言場景的執行緒中所強調的那樣,我想避免這種情況。
我可能可以使用do.call但正在尋找類似于python' 的東西(),我可以在其中呼叫基于字串的函式,例如
methods = {pi: math.pi, sum: math.sum}
methods["pi"]()
base實作這一目標的 R方法是什么?
uj5u.com熱心網友回復:
我們可能會使用 getFunction
library(ggplot2)
p1 <- p
getFunction(all_ggplot2_funs[grep("theme_", all_ggplot2_funs)][15])()
-檢查
> p2 <- p theme_minimal()
> all.equal(p1, p2)
[1] TRUE
uj5u.com熱心網友回復:
我認為您不需要單獨提取函式串列,因為它已經可以在函式串列中訪問了。而且對于未來向ggplot2-universe 添加功能,通過名稱而不是串列中的位置呼叫函式似乎更穩定,因此我認為:
choice <- "minimal"
p match.fun( paste0("theme_", choice) )()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/387220.html
上一篇:為字符出現制作堆疊條形圖
