如何从列表中的字符转到R中的可用表达式?

时间:2017-02-08 15:04:04

标签: r ggplot2 lapply

我有一个data.table df,其中包含各种列x1,x2,x3,etc...(虽然名称中没有实际模式)但我想通常传入" config"对于可变数量的列来做某事。例如,生成列图表列表。我想象的是这样的话:

col.plot.list <- list(list(col='x2', seg=c(0,6)), list(col='z17', seg=NULL))

然后能够将其传递给一个函数,该函数将返回解释每个子列表元素的列的图表列表,以便以不同的方式配置图表。在这个例子中,像这样:

gen.plots <- function(col.plot.list) {
    lapply(col.plost.list, function(x) {
        ggplot(df, aes(cumsum(x$col)) #plus geoms & optionally leverage x$seg if not NULL
    }
}

我想知道的是如何将对应于列名的字符串转回一个可用的表达式,我可以传递给df$x$colaes(y=x$col)等等。为了那个存在?或者是否有一种不同的类型我应该用来保存在原始列表中以开始哪个可以帮助?我不想保存完整的列向量,因为这样就不允许我在data.table中执行lapply次操作。

1 个答案:

答案 0 :(得分:1)

你的问题不是很清楚,但也许这个例子很有用。基本上,您需要使用aes_,它可以处理引用的表达式。

library(data.table)
library(ggplot2)
df <- data.table(x2 = 1:2, z17 = 3:4, y = 1:2)

col.plot.list <- list(list(col='x2', seg=c(0,6)), list(col='z17', seg=NULL))

gen.plots <- function(col.plot.list) {
  lapply(col.plot.list, function(x) {
    col <- x$seg
    xval <- as.name(x$col)
    ggplot(df, aes_(x = bquote(cumsum(.(xval))),
                   y = quote(y), 
                   color = if (is.null(col)) NULL else quote(col))) + 
      geom_point()
  })
}

gen.plots(col.plot.list)[[1]]
gen.plots(col.plot.list)[[2]]

如果您只想对data.table(或data.frame)进行分组,这是一个常见问题解答,您需要研究help("[")和data.table插图:df[[col.plot.list[[1]]$col]]