【问题标题】:Error using curly-curly operator within a function在函数中使用卷曲运算符时出错
【发布时间】:2019-07-07 21:23:40
【问题描述】:

我正在尝试创建一个函数来对我的数据运行 Kruskal Wallis 测试,但具有不同的分组类别。我尝试创建的函数将能够以感兴趣的不同分组类别的名称命名。我的代码基于此处看到的类似问题:

R: Kruskal-Wallis test in loop over specified columns in data frame

我正在尝试使用 rlang 0.4 包中的新 curly-curly 运算符。

https://www.tidyverse.org/articles/2019/06/rlang-0-4-0/

这是我的问题的一个例子:

library(dplyr)
library(broom)
set.seed(123)

df <- tbl_df(data.frame(
  group_cat1 = as.factor(rep(c("a", "b", "c"), each = 5)),
  group_cat2 = as.factor(rep(c("x", "y", "z"), each = 5)),
  var1   = runif(15, 0, 10),
  var2    = runif(15, 0, 10),
  var3   = runif(15, 0, 10)))

models_df <- df %>% 
  gather(variable, result, -group_cat1) %>% 
  group_by(variable) %>% 
  do(kruskal.test(x = .$result, g =.$group_cat1) %>% tidy())

这很好用,但是,如果我尝试通过定义一个函数来概括问题,我无法让它工作。

get_linear_model <- function(group_category) {
  df %>% 
    gather(variable, result, -{{group_category}}) %>% 
  group_by(variable) %>% 
  do(kruskal.test(x = .$result, g =.${{group_category}) %>% tidy())
}

我收到以下错误

Error: unexpected '{' in:
"  group_by(variable) %>% 
  do(kruskal.test(x = .$result, g =.${"

我相信我在环境或如何使用这个新的 curly-curly 运算符方面缺少一些东西。我有点迷茫,所以任何帮助将不胜感激!

【问题讨论】:

  • 你最后没有}大括号,但是,即使你添加了它也不会起作用

标签: r


【解决方案1】:

对于第二种情况,我们可以使用[[ 并转换为字符串,因为$ 不能正常工作

get_linear_model <- function(group_category) {

  df %>% 
    gather(variable, result, -{{group_category}}) %>% 
    group_by(variable) %>% 
    do(kruskal.test(x = .$result, 
       g = .[[rlang::as_name(enquo(group_category))]]) %>% 
            tidy())
    }

models_df2 <- get_linear_model(group_cat1)
identical(models_df, models_df2)
#[1] TRUE

在OP的代码中,错误是由于大括号不平衡

 ...
  do(kruskal.test(x = .$result, g =.${{group_category}) %>% tidy())
                                     ^^^            ^^^
                                      2              1

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 2015-03-14
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2022-01-07
    • 2021-11-09
    相关资源
    最近更新 更多