Non*_*per 3 r function ggplot2
我指定一个函数来绘制这样的图表:
func.plot <- function(z){
df %>%
ggplot(aes(z)) +
geom_histogram(aes(y =..density..),
binwidth = 0.004,
col="red",
fill="green",
alpha=.2) +
geom_density(col=2) +
labs(title="title", x="z", y="vertical axis")
}
Run Code Online (Sandbox Code Playgroud)
目的是为数据集中的一些变量生成直方图,因此在这个函数中我还想使用变量名称作为轴的标题,x以便使图区分开来。但是,当使用变量调用函数时,例如func.plot(var)会出现错误:
不知道如何自动选择 tbl_ts/tbl_df/tbl/data.frame 类型的对象的比例。默认为连续。
错误:美学必须是长度 1 或与数据 (883) 相同:x
我有几个问题:
对于这个特定的功能,如何修复它?
更一般地说,有时我想编写引用引号中的参数的函数,例如上面的 x 标题。另一个简单的例子是读取或写入数据,如下所示:
func.write <- function(x){
write.csv(x, file="x.csv", row.names=FALSE)
}
Run Code Online (Sandbox Code Playgroud)
当使用 调用时,该函数也无法正确实现func.write(df)。它将写入数据,但名称为"x.csv".
根据您想要传递输入参数的方式,您可以使用以下函数之一。
传递引用的参数:
library(ggplot2)
library(rlang)
func.plot_quoted <- function(df, z){
df %>%
ggplot(aes(!!sym(z))) +
geom_histogram(aes(y =..density..),
binwidth = 0.004,
col="red",
fill="green",
alpha=.2) +
geom_density(col=2) +
labs(title="title", x=z, y="vertical axis")
}
Run Code Online (Sandbox Code Playgroud)
可以用作
func.plot_quoted(mtcars, "cyl")
Run Code Online (Sandbox Code Playgroud)
并传递不带引号的参数
func.plot_unquoted <- function(df, z){
df %>%
ggplot(aes({{z}})) +
geom_histogram(aes(y =..density..),
binwidth = 0.004,
col="red",
fill="green",
alpha=.2) +
geom_density(col=2) +
labs(title="title", x={{z}}, y="vertical axis")
}
Run Code Online (Sandbox Code Playgroud)
可以用作
func.plot_unquoted(mtcars, cyl)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2584 次 |
| 最近记录: |