将函数参数作为字符串存储在变量中

时间:2018-10-31 17:03:40

标签: r ggplot2

基本上,如何通过变量将参数传递给ggplot?例如,假设我希望将scale_arg = 'labels = comma,'传递到scale_y_continuous中,有时它采用该值,有时只是一个空字符串,这取决于我是否希望ggplot具有该arg。我如何准确地将以字符串形式存储在变量中的参数传递给ggplot?简单地scale_y_continuous(scale_arg)行不通

以下示例:

library(ggplot2)
library(scales)

g <- ggplot(data3, aes(x = yrmo, y = weight, color = store)) +
    geom_line(na.rm = TRUE) +
    scale_x_date() +
    scale_y_continuous(
      limits = c(0, 10),
      breaks = seq(0, 10, 1),
      labels = comma,
      expand = c(0, 0)
    )

2 个答案:

答案 0 :(得分:1)

您可以使用do.call,它将列表的元素作为参数传递给函数。如果您使用label_arg <- list()运行以下代码,则结果将是您期望的,而无需使用额外的labels参数。您可能想出了一种将参数作为字符串传递的方法,但这将是非常非R的模式。

library(scales)

scale_args1 <- 
  list(
    limits = c(0, 10)*1e4,
    breaks = seq(0, 10, 1)*1e4,
    expand = c(0, 0))

label_arg <- list(labels = comma)

scale_args <- unlist(list(scale_args1, label_arg), recursive = F)


ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width*1e4,
                      color = Species)) +
  geom_line(na.rm = TRUE) +
  do.call(scale_y_continuous, scale_args)

任何阅读此书的人的注释:与unlist(list(list_1, list_2), recursive = F)相比,在R中有更好的方法来组合列表吗?像cbind,但有列表吗?

答案 1 :(得分:0)

您必须将参数保存在名为的向量中,例如下面的scale_arg名称(在本例中为labels)是要保留在变量中的参数的名称。

scale_arg = c(labels = 'Sepal Width Label Test')

g <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width,
                      color = Species)) +
  geom_line(na.rm = TRUE) +
  scale_y_continuous(
    limits = c(0, 10),
    breaks = seq(0, 10, 1),
    scale_arg,
    expand = c(0, 0)
  )
g

enter image description here