提问人:inprogress123 提问时间:11/12/2023 最后编辑:inprogress123 更新时间:11/12/2023 访问量:41
尝试制作我自己的函数来绘制
Trying to make my own function that plots
问:
我还是 R 的新手,现在我正在尝试制作自己的函数,我将数据帧和列名传递给它并输出绘图。我想做这样的事情,但我想我做错了什么。假设数据帧的名称为 my_dataframe,列为 Age,并按 Species 分组。在此示例中,我还希望标题为“age”。然后:
makePlot <- function(X,col1,col2) {
p1 <- ggplot(X, aes(x = col1, fill = col2, y = col2)) + geom_point(aes(color = col2)) +
labs(x = 'Label_x', y = 'Label_y', title = col1)
return(p1)
}
make_rainplot(my_dataframe, Age, Species)
谢谢!
我在网上搜索过,但没有找到如何做到这一点的解释。
答:
0赞
I_O
11/12/2023
#1
除了@YBS指出的函数名称和调用之间的不匹配之外,您的函数还会尝试评估(此处:查找命名的对象),例如 Age 没有成功,因为外部没有这样的对象。my_dataframe
为了能够使用不带引号的对象名称作为 tidyverse 中使用的参数,您可以延迟计算,例如:ensym
makePlot2 <- function(X, col1, col2) {
col1 <- ensym(col1) ## ensym: don't go looking for Age yet
col2 <- ensym(col2)
ggplot(X, aes(x = !!col1, ## !!: now try to find Age (within X)
fill = !!col2, y = !!col2)) +
geom_point(aes(color = !!col2)) +
labs(x = 'Label_x', y = 'Label_y', title = col1)
}
评论
0赞
inprogress123
11/13/2023
这正是我想要的。谢谢!
0赞
I_O
11/13/2023
很高兴它奏效了!请注意,还有一个复数版本,可以一次性处理更多函数参数(全部在提供的非标准评估链接中)。如果解决方案适合您,请记得将答案标记为已接受,以便关闭工单。ensyms
评论
makePlot
make_rainplot