[英]Trying to create a loop for applying this function
function 本身可以工作,但是我正在嘗試遍歷數據中的所有列,我知道使用 ~apply() 可以工作,並且希望您能幫助使用這個謝謝。
library(scales)
factorVars <- select_if(df, is.factor)
## function to tidy up to a summary table
tidy_eval_arrange <- function(.data, var) {
tidydata <- .data %>%
count({{var}}) %>%
mutate(pct = n / sum(n),
pctlabel = paste0(round(pct * 100), "%"))
print(tidydata)
}
## The issue is here, prints without calculating the percentage properly.
nm <- names(factorVars)
for(i in seq_along(nm)){
tidy_eval_arrange(df, nm[i])
}
您在for
循環中傳遞字符串,而{{}}
不適用於字符串(如預期的那樣)。
tidy_eval_arrange <- function(.data, var) {
tidydata <- .data %>%
count({{var}}) %>%
mutate(pct = n / sum(n),
pctlabel = paste0(round(pct * 100), "%"))
print(tidydata)
}
tidy_eval_arrange(mtcars, "cyl")
# "cyl" n pct pctlabel
#1 cyl 32 1 100%
{{}}
用於不帶引號的變量。 這按預期工作。
tidy_eval_arrange(mtcars, cyl)
# cyl n pct pctlabel
#1 4 11 0.34375 34%
#2 6 7 0.21875 22%
#3 8 14 0.43750 44%
為了讓您的代碼在for
循環中工作,請將 function 更改為
tidy_eval_arrange <- function(.data, var) {
tidydata <- .data %>%
count(.data[[var]]) %>%
mutate(pct = n / sum(n),
pctlabel = paste0(round(pct * 100), "%"))
print(tidydata)
}
如果我們使用ensym
轉換為sym
bol 並評估 ( !!
),我們可以傳遞字符串或不加引號
library(dplyr)
tidy_eval_arrange <- function(.data, var) {
tidydata <- .data %>%
count(!! ensym(var)) %>%
mutate(pct = n / sum(n),
pctlabel = paste0(round(pct * 100), "%"))
print(tidydata)
}
-測試(在dplyr
1.0.4
版本上測試)
tidy_eval_arrange(mtcars, "cyl")
# cyl n pct pctlabel
#1 4 11 0.34375 34%
#2 6 7 0.21875 22%
#3 8 14 0.43750 44%
tidy_eval_arrange(mtcars, cyl)
# cyl n pct pctlabel
#1 4 11 0.34375 34%
#2 6 7 0.21875 22%
#3 8 14 0.43750 44%
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.