【发布时间】:2022-01-21 15:41:09
【问题描述】:
我正在尝试根据给定的一些字符串从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"]()
什么是 R base 方法来实现这一点?
【问题讨论】:
-
您可以使用 getFunction("theme_minimal", where = "package:ggplot2") 将 akruns 解决方案直接应用于命名空间,而不是使用导出的函数创建字符向量
-
感谢@tjebo,这比选择
theme_minimal稍微复杂一些。我想获得所有这些主题,将它们存储在某个地方(闪亮的东西),然后我可以稍后根据提供的字符串进行 grep,但解决方案确实非常 useful。