通过lapply传递ggplot2的aes_string()字符串不起作用

时间:2017-12-06 19:56:40

标签: r ggplot2

我写了一个需要一个参数的函数,并且应该输出一个图。它所采用的参数是在y轴上作为字符绘制的变量。以下是一些示例数据:

df_year <- data.frame(year = c(2000, 2001), V1 = c(1.7,2.6))
df_year_speaker <- data.frame(year = c(2000, 2000, 2001, 2001), 
                              speaker = c("Smith", "House", "Smith", "House"),
                              V1 = c(1.5,2,2.3,3), 
                              partyaffil = c("rep", "dem", "rep", "dem"))

这是我的剧情功能:

require(ggplot2)
plot_fct <- function(means_year = df_year,
                     means_year_speaker = df_year_speaker,
                     x="year",
                     y="V1"){
  ggplot()+
    scale_fill_manual(values = c("#778aff","#ff6f54"))+ #blue,red
    geom_line(data = means_year, aes_string(x, y),
                color = "#212121")+
    geom_point(data = means_year_speaker,  aes_string(x, y))+
    geom_label(data = means_year_speaker, aes_string(x, y,label="speaker",
                                                       fill = "partyaffil"),
                                                       color = "#343434")
}

当我直接运行我的功能时,它可以正常工作:

plot_fct(y = "V1")

但是当我通过lapply调用它时,我收到错误:

> lapply(list(A = "V1"), FUN = plot_fct)
  Error: ggplot2 doesn't know how to deal with data of class character 

运行追踪显示错误发生在fortify.default(data)。 关于错误或如何通过lapply将字符串传递给我的函数的任何想法?

2 个答案:

答案 0 :(得分:0)

问题在于,不清楚函数的哪个参数必须设置为列表的单个值。

如果通过删除y的默认参数

来更改函数的签名
plot_fct <- function(y, means_year = df_year,
                 means_year_speaker = df_year_speaker,
                 x="year")

它应该按照你的意图工作。

答案 1 :(得分:0)

请注意,当您致电plot_fct(y = "V1")时,您特别将V1传递给y=参数。使用lapply时,默认情况下会转到第一个参数,y不是第一个参数。你可以做到

lapply(list(A = "V1"), FUN = function(y) plot_fct(y=y))