【问题标题】:Getting "Error: `x` must be a formula" with qwraps2 summary_table function使用 qwraps2 summary_table 函数获取“错误:`x` 必须是公式”
【发布时间】:2019-03-19 15:00:36
【问题描述】:

我在创建要传递给summary_table 的summaries 参数的列表时遇到问题。当我去使用 summary_table 函数时,它会返回

“错误:x 必须是公式”

summary_test <- list("Gender" = 
     list("Female" = ~ qwraps2::n_perc0(.mydata$sex == "F"),
           "Male" = ~ qwraps2::n_perc0(.mydata$sex == "M")),
  "Age" =
  list("Mean" = ~ qwraps2::mean_sd(.mydata$age, denote_sd = "paren")),
 "Comorbidities" =
   list("HIV Positive" == ~ qwraps2::n_perc0(.mydata$hiv == 1),
        "Type 2 Diabetes" == ~ qwraps2::n_perc0(.mydata$diabetes == 1)))

whole <- summary_table(mydata, summary_test)

【问题讨论】:

  • 能否请您提供您的数据集或至少其中的一部分来重现您的问题?你可以用dput(mydata)'谢谢
  • 您是否有理由使用.mydata 而不是.data,如summary_table 的文档中所述?看起来您在上一个列表中使用了==,而不是=
  • 嗨!我最终解决了我的问题。感谢您的回复!

标签: r qwraps2


【解决方案1】:

没有您的数据就无法重现,但看起来您在最后一个列表中写了== 而不是=。试试:

summary_test <- list("Gender" = 
                   list("Female" = ~ qwraps2::n_perc0(.mydata$sex == "F"),
                        "Male" = ~ qwraps2::n_perc0(.mydata$sex == "M")),
                 "Age" =
                   list("Mean" = ~ qwraps2::mean_sd(.mydata$age, denote_sd = "paren"),
                        "Comorbidities" =
                          list("HIV Positive" = ~ qwraps2::n_perc0(.mydata$hiv == 1),
                               "Type 2 Diabetes" = ~ qwraps2::n_perc0(.mydata$diabetes == 1)))

whole <- summary_table(mydata, summary_test)

【讨论】:

    【解决方案2】:

    最终成功了:

    summary1 <- list("Age" = 
             list(
               "Mean" = ~ qwraps2::mean_sd(.data$age, digits=1)),
       "Gender" =
           list(
             "Male" = ~ qwraps2::n_perc(.data$sex == "M", digits = 1),
             "Female" = ~ qwraps2::n_perc(.data$sex == "F", digits = 1)),
       "Comorbidities" =
         list(
           "Type 2 Diabetes" = ~ qwraps2::n_perc(.data$diabetes == "1", digits = 1),
           "Past History of PTB" = ~ qwraps2::n_perc(.data$past.ptb == "1", digits = 1),
           "HIV" = ~ qwraps2::n_perc(.data$hiv == "1", digits = 1)
         ))
    

    【讨论】:

      【解决方案3】:

      摘要是公式列表的列表,即最高级别 object 是一个列表,每个元素都是一个列表。这些较低的元素 级别列表都是公式。提供的摘要:

      summary_test <- list("Gender" = 
                             list("Female" = ~ qwraps2::n_perc0(.mydata$sex == "F"),
                                  "Male"   = ~ qwraps2::n_perc0(.mydata$sex == "M")),
                           "Age" =
                             list("Mean" = ~ qwraps2::mean_sd(.mydata$age, denote_sd = "paren")),
                           "Comorbidities" =
                             list("HIV Positive"    == ~ qwraps2::n_perc0(.mydata$hiv == 1),
                                  "Type 2 Diabetes" == ~ qwraps2::n_perc0(.mydata$diabetes == 1)))
      

      在“合并症”的定义中有==,因此是逻辑语句, 不是公式。

      str(summary_test) 
      #> List of 3
      #>  $ Gender       :List of 2
      #>   ..$ Female:Class 'formula'  language ~qwraps2::n_perc0(.mydata$sex == "F")
      #>   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
      #>   ..$ Male  :Class 'formula'  language ~qwraps2::n_perc0(.mydata$sex == "M")
      #>   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
      #>  $ Age          :List of 1
      #>   ..$ Mean:Class 'formula'  language ~qwraps2::mean_sd(.mydata$age, denote_sd = "paren")
      #>   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
      #>  $ Comorbidities:List of 2
      #>   ..$ : logi FALSE
      #>   ..$ : logi FALSE
      

      另外,.mydata 需要替换为正确的 tidyverse 数据 代词.data。正确的语法是:

      summary_test <- list("Gender" = 
                             list("Female" = ~ qwraps2::n_perc0(.data$sex == "F"),
                                  "Male"   = ~ qwraps2::n_perc0(.data$sex == "M")),
                           "Age" =
                             list("Mean" = ~ qwraps2::mean_sd(.data$age, denote_sd = "paren")),
                           "Comorbidities" =
                             list("HIV Positive"    = ~ qwraps2::n_perc0(.data$hiv == 1),
                                  "Type 2 Diabetes" = ~ qwraps2::n_perc0(.data$diabetes == 1)))
      
      str(summary_test)
      #> List of 3
      #>  $ Gender       :List of 2
      #>   ..$ Female:Class 'formula'  language ~qwraps2::n_perc0(.data$sex == "F")
      #>   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
      #>   ..$ Male  :Class 'formula'  language ~qwraps2::n_perc0(.data$sex == "M")
      #>   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
      #>  $ Age          :List of 1
      #>   ..$ Mean:Class 'formula'  language ~qwraps2::mean_sd(.data$age, denote_sd = "paren")
      #>   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
      #>  $ Comorbidities:List of 2
      #>   ..$ HIV Positive   :Class 'formula'  language ~qwraps2::n_perc0(.data$hiv == 1)
      #>   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
      #>   ..$ Type 2 Diabetes:Class 'formula'  language ~qwraps2::n_perc0(.data$diabetes == 1)
      #>   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
      

      reprex package (v0.3.0) 于 2019 年 11 月 14 日创建

      更新 从 qwraps2 v0.5.0 开始,不再需要使用 .data 代词。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-04
        • 1970-01-01
        • 2014-07-27
        • 1970-01-01
        相关资源
        最近更新 更多