我有一个自定义函数,它接受数据帧和该数据帧的特定列作为输入。我想使用列名称根据单独的标签参数自动生成标题。我已经找到了一种方法,通过使用 colnames() 来隔离列变量并将其名称转换为字符串,但是有没有更有效的方法来做到这一点?我正在尝试学习如何正确设置 NSE 功能,但不断突破我的理解极限。
这是一个可重现的示例:
library(dplyr)
library(ggplot2)
#sample data
data(msleep)
#labels for title generation
fancylabs <- as_labeller(c('awake' = "Awake",
'sleep_rem' = "REM"))
#function to plot two columns and generate a title based on y
quickplot <- function(df, x, y){
#use colnames to convert y to a string - IS THERE A LESS CLUNKY WAY TO DO THIS?
yStr <- df %>% select({{y}}) %>% colnames()
#plot and use labeller to convert string to fancy label
df %>%
ggplot(aes({{x}}, {{y}})) +
geom_point() +
labs(title=paste0("Total Sleep Time vs. ", fancylabs(yStr), " Time"))
}
quickplot(df=msleep, x=sleep_total, y=awake)
据我了解你的功能是为图表制作标题,我可以向你提供我的想法。
我创建了一个将变量名称转换为拼写文本的函数,它仅适用于逻辑命名的变量,就像在 R 中的大多数测试数据库中一样,但它也可以现代化
library(dplyr)
library(ggplot2)
library(rlang)
# Sample data
data(msleep)
#Function to rename the variables
rename_variable <- function(var_name) {
var_name <- gsub("_", " ", var_name) # Replace underscores with spaces
var_name <- tools::toTitleCase(var_name) # Change the first letter to a capital letter
return(var_name)
}
quickplot <- function(df, x, y) {
# Get the names of x and y columns
x_name <- deparse(substitute(x))
y_name <- deparse(substitute(y))
#Rename the variables
x_title <- rename_variable(x_name)
y_title <- rename_variable(y_name)
df %>%
ggplot(aes({{x}}, {{y}})) +
geom_point() +
labs(title = paste0(x_title, " vs ", y_title))
}
# Example usage
quickplot(df = msleep, x = sleep_total, y = awake)
您还可以在函数中添加两个参数 x_name 和 y_name ,以便用户可以输入名称本身,如果在输入函数时忽略它们,则将使用 rename_variable 函数