gpt4 book ai didi

r - 如何引用引号中的函数参数?

转载 作者:行者123 更新时间:2023-12-04 12:41:18 25 4
gpt4 key购买 nike

我正在指定一个函数来绘制这样的图形:

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")
}

目的是为数据集中的几个变量生成直方图,因此在这个函数中我还想使用变量名称作为 x 轴的标题,以便制作情节有区别。但是,当使用诸如 func.plot(var) 之类的变量调用函数时,会出现错误:

Don't know how to automatically pick scale for object of type tbl_ts/tbl_df/tbl/data.frame. Defaulting to continuous.

Error: Aesthetics must be either length 1 or the same as the data (883): x

我有几个问题:

  1. 对于这个特定的功能,如何修复?

  2. 更一般地说,有时我想编写引用引号中的参数的函数,例如上面的 x 标题。另一个简单的例子是像这样读取或写入数据:

func.write <- function(x){
write.csv(x, file="x.csv", row.names=FALSE)
}

当使用 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")
}

可以用作

func.plot_quoted(mtcars, "cyl")

并传递不带引号的参数

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")
}

可以用作

func.plot_unquoted(mtcars, cyl)

enter image description here

关于r - 如何引用引号中的函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58926917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com