我正在try 编写一个R函数,该函数返回汇总统计表(基于rstatix包中的get_summary stats函数)并计算Wilcoxon测试.这将对具有感兴趣的常量X变量的几个Y变量执行(这将是汇总统计表的基础).

函数现在看起来是这样的:

summary_stats_and_test <- function(df, xvar, yvars){
  df_res <- df %>% 
    group_by({{ xvar }}) %>% 
    select({{ yvars }}, {{ xvar }}) %>% 
    get_summary_stats(type = "mean_sd") %>% 
    arrange(variable) %>% 
    mutate(across(where(is.numeric), ~ num(., digits = 1)))
  
  stat_test <- yvars %>% 
  paste(" ~ ", xvar) %>% 
  map(as.formula) %>% 
  map_df(~wilcox_test(.x, data = df))
  
  return(list(table = df_res, test = stat_test))
}

我把df_res块里的xvar yvars"go 掉"了. 然而,我似乎无法理解如何在Paste函数中指定xvar值才能正确执行.

以下是一些代码,例如:

weight_wc_deltas_vars = c("weight_1", "weight_2", "weight_3", "WC_1", "WC_2", "WC_3")
df %>%  
  mutate(has_weight = if_else(is.na(col_1), "no", "yes")) %>% 
  summary_stats_and_test(xvar = has_weight,
                         yvars=weight_wc_deltas_vars[1:3])

如果函数中的has_weight没有引号,我会得到一个错误:我的函数中的Error: object 'has_weight' not found'. If it's with quatation mark, I don't get an error, but the group_by`函数没有效果.

总而言之,我不太清楚最好的做法是不是在R中写函数的参数,带引号还是不带引号.在tidyVerse的上下文中,竞速的概念是明确的,但在这里我被同样的问题卡住了.

推荐答案

在您的代码中,您需要将xvar引用的名称转换为字符串标签.您可以通过以下两种方式之一执行此操作

rlang::quo_label(rlang::enquo(xvar))

或通过其核心R等效项

deparse(substitute(xvar), backtick = TRUE)

请注意backtick = TRUE参数,并且我们使用的是quo_label()而不是quo_name()!这对于正确处理传递给函数的非语法名称(例如`foo bar`)非常重要.

当通过yvars传递时,您的代码也不能正确地处理这样的名称,您需要修复这个问题.一种方法是将yvars转换为名称(通过map(yvars, rlang::sym)lapply(yvars, as.name)),然后如上所述重新转换为标签.但不管怎样,你现在所做的只是绕道而行.直接构造公式要容易得多,而不是绕道构造字符串.这样一来,你也不必将你的xvar转换成标签.

  stat_test <- yvars %>%
    map(rlang::sym) %>%
    map(\(y) rlang::inject(!! y ~ !! rlang::ensym(xvar))) %>%
    map_df(~ wilcox_test(.x, data = df))

R相关问答推荐

跨列应用多个摘要函数:summerise_all:列表对象无法强制为double类型'

terra nearest()仅为所有`to_id`列返回NA

大规模重新标记haven标签数据

如何在modelsummary中重命名统计数据?

未识别时区

如何在所有绘图中保持条件值的 colored颜色 相同?

如何对2个列表元素的所有组合进行操作?

在纵向数据集中创建新行

如何将一些单元格的内容随机 Select 到一个数据框中?

我是否可以使用多个变异项来构建顺序列(标记多个问题)

将多个列合并为一个列的有效方法是什么?

Ggplot2如何找到存储在对象中的残差和拟合值?

使用ggplot2绘制具有边缘分布的坡度图

附加中缀操作符

如何在R中的两列以上使用联合(&U)?

了解nchar在列表上的意外行为

随机生成样本,同时在R内的随机样本中至少包含一次所有值

如何使用list_rind在列表中保留已命名但不包含第0行的记录?

删除r中每个因素级别的最后2行

如何将一列相关性转换为R中的相关性矩阵