我写了一个需要一个参数的函数,并且应该输出一个图。它所采用的参数是在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
将字符串传递给我的函数的任何想法?
答案 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))