gpt4 book ai didi

r - 避免 eval-parse 或 do.call

转载 作者:行者123 更新时间:2023-12-05 01:26:09 26 4
gpt4 key购买 nike

我正在尝试根据给定的一些字符串从 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

library(ggplot2)
p1 <- p +
getFunction(all_ggplot2_funs[grep("theme_", all_ggplot2_funs)][15])()

-检查

> p2 <- p + theme_minimal()
> all.equal(p1, p2)
[1] TRUE

关于r - 避免 eval-parse 或 do.call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70414757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com