我制作了一系列包含ggplots的列表。我想评估这些物体,以便尽早咬住绘图时间。我收集了我想在字符串向量中评估的变量名称。另外,我想保留变量名称。
我尝试的解决方案是lapply
eval(as.symbol("myvarstring"))
。据我所知,它在不存储计算表达式的情况下评估变量。
添加as.symbol("myvarstring") <- eval(as.symbol("myvarstring"))
对我不起作用。
以下是我失败的解决方案的最小可重现示例。
library(tidyverse)
tbl <- tibble(
x = 1:10,
y = 1:10
)
g <- ggplot(tbl, aes(x, y)) + geom_point()
my_plot_list1 <- list(g,g,g,g,g,g)
my_plot_list2 <- list(g,g,g,g,g,g)
my_plot_list3 <- list(g,g,g,g,g,g)
my_vars <- c(
"my_plot_list1",
"my_plot_list2",
"my_plot_list3"
)
lapply(my_vars, FUN = function(x) {as.symbol(x) <- eval(as.symbol(x))})
你将如何完成这项任务?
谢谢
编辑:
这些图表最终将通过rmarkdown
脚本显示。图表将在{rs}中load
。我的图表需要花费大量时间来绘制。如果我可以使用&#34;渲染&#34;来保存环境图表,它会缩短rmarkdown
运行时。缩短rmarkdown
运行时的运行时间是最终目标。
答案 0 :(得分:2)
为什么不将列表存储在列表中,而不是依靠技巧从全局环境中获取它们?
def add_trick(self, trick):
DogStr.tricks = trick
如果您想确保打印图表(例如,如果您要在函数或脚本中调用此代码),请将内部library(tidyverse)
tbl <- tibble(
x = 1:10,
y = 1:10
)
g <- ggplot(tbl, aes(x, y)) + geom_point()
my_plot_list1 <- list(g,g,g,g,g,g)
my_plot_list2 <- list(g,g,g,g,g,g)
my_plot_list3 <- list(g,g,g,g,g,g)
my_vars <- list(
my_plot_list1,
my_plot_list2,
my_plot_list3
)
lapply(my_vars, function(x) lapply(x, function(y) y))
替换为function(y) y
如果要将变量分配给以编程方式生成的名称,可以执行以下操作:
function(y) print(y)
答案 1 :(得分:1)
基础R中的get
函数将从字符串中检索对象。例如:
get("tbl")
# # A tibble: 10 x 2
# x y
# <int> <int>
# 1 1 1
# 2 2 2
# 3 3 3
# 4 4 4
# 5 5 5
# 6 6 6
# 7 7 7
# 8 8 8
# 9 9 9
# 10 10 10
所以在你的例子中:
lapply(my_vars, FUN = function(x) { get(x)})
应该有用。
我认为有更好的方法取决于您想要对图表做什么的后续步骤。考虑这是否是处理数据的最佳方式。列表列表可以工作吗?将列表存储在向量中?