将数据框列传递给自定义函数以进行分析和标题

问题描述 投票:0回答:1

我有一个自定义函数,它接受数据帧和该数据帧的特定列作为输入。我想使用列名称根据单独的标签参数自动生成标题。我已经找到了一种方法,通过使用 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 ggplot2 nse
1个回答
0
投票

据我了解你的功能是为图表制作标题,我可以向你提供我的想法。

我创建了一个将变量名称转换为拼写文本的函数,它仅适用于逻辑命名的变量,就像在 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 函数

© www.soinside.com 2019 - 2024. All rights reserved.