【问题标题】:Error: Join columns must be present in data. x Problem with `column1` and `column2`错误:连接列必须存在于数据中。 x `column1` 和 `column2` 的问题
【发布时间】:2022-01-11 18:34:01
【问题描述】:

这个函数出错了,当我用 var1-var3 更改 colum1-column3 时它可以工作,这很奇怪:

var1<-c(rep("A",4),rep("B",4))
var2<-c(rep("C",4),rep("D",4))
var3<-c(rep("E",2),rep("F",4),rep("G",2))
dataset<-data.frame(var1,var2,var3)


Rfun<-function(data,column1,column2,column3){

  data_<-data %>%dplyr::mutate(n = 1, {{column3}} := str_c('column3_', {{column3}})) %>% 
    complete({{column1}}, {{column2}}, {{column3}}, fill = list(n = 0)) %>% 
    pivot_wider(names_from = {{column3}}, values_from = n, values_fn = sum) %>% 
    mutate(Total = rowSums(across(where(is.numeric)))) %>% 
    group_by({{column1}}) %>%
    mutate(across(starts_with('column3'), 
                  ~ case_when(. == 0 ~ '0(0%)', 
                              TRUE ~ sprintf('%d(%d%%)', .,  100 * mean(. != 0)))))  %>%
    ungroup
  
  
library(vcdExtra)

   test<-CMHtest(table(data$column2, data$column3, data$column1),overall=TRUE)
   list<-c(data_,test)
   return(list)
}

Rfun(dataset,var1,var2,var3)

这是错误:

【问题讨论】:

  • 您的问题是Rfun() 中的complete(column1, column2, column3, fill = list(n = 0)) 行。此时函数中,data 还没有任何名为column1column2 的列;而column3 是在上面定义的:mutate(..., column3 = ...)。如果您希望complete()column1 视为data 中的var1 变量,那么您需要使用语法{{column1}},因为@akrun 建议here
  • 这将捕获符号 var1,作为参数传递给调用Rfun(dataset, column1 = var1, ...)中的column1参数;它会将complete(column1, ...) 行替换为complete(var1, ...)

标签: r function


【解决方案1】:

考虑使用{{}} 进行评估

Rfun<-function(data,column1,column2,column3){
   data %>%
    mutate(n = 1, {{column3}} := str_c('column3_', {{column3}})) %>% 
    complete({{column1}}, {{column2}}, {{column3}}, fill = list(n = 0)) %>% 
    pivot_wider(names_from = {{column3}}, values_from = n, values_fn = sum) %>% 
    mutate(Total = rowSums(across(where(is.numeric)))) %>% 
    group_by({{column1}}) %>%
    mutate(across(starts_with('column3'), 
                  ~ case_when(. == 0 ~ '0(0%)', 
                      TRUE ~ sprintf('%d(%d%%)', .,  100 * mean(. != 0)))))  %>%
    ungroup
    
  
  
}

-测试

Rfun(dataset,var1,var2,var3)
# A tibble: 4 × 6
  var1  var2  column3_E column3_F column3_G Total
  <chr> <chr> <chr>     <chr>     <chr>     <dbl>
1 A     C     2(50%)    2(50%)    0(0%)         4
2 A     D     0(0%)     0(0%)     0(0%)         0
3 B     C     0(0%)     0(0%)     0(0%)         0
4 B     D     0(0%)     2(50%)    2(50%)        4

【讨论】:

  • 谢谢 :) 当我在函数“CMH”测试中集成并且我想打印它时它不起作用的另一件事:test
  • @Ruser-lab9 CMH 是什么?如果您在另一个函数中使用此函数。可能您需要!! 参数,即Rfun(dataset, !!var1, !!var2, !!var3)
  • 我不知道你是如何在CMHtest内部传递Rfun的
  • 我将对上面的帖子进行编辑,包括 CMHtest() 函数
  • @Ruser-lab9 谢谢,请做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2019-03-14
  • 2023-03-02
  • 2021-01-19
相关资源
最近更新 更多