![](/img/trans.png)
[英]"Error: `x` must be a formula" with qwraps2 summary_table function
[英]Getting "Error: `x` must be a formula" with qwraps2 summary_table function
我在創建構建列表列表以傳遞給 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)
沒有你的數據就無法重現,但看起來你在最后一個列表中寫了==
而不是=
。 嘗試:
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)
最后這奏效了:
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)
))
摘要是公式列表的列表,即最高級別的對象是一個列表,每個元素都是一個列表。 這些低級列表的元素都是要公式化的。 提供的摘要:
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 包(v0.3.0) 於 2019 年 11 月 14 日創建
更新從 qwraps2 v0.5.0 開始,不再需要使用.data
代詞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.