R 正在尝试创建用于应用此函数的循环
函数本身是有效的,但我正在尝试循环遍历数据中的所有列,我知道使用~apply()是有效的,希望您能帮助我使用它,谢谢R 正在尝试创建用于应用此函数的循环,r,function,for-loop,apply,summarize,R,Function,For Loop,Apply,Summarize,函数本身是有效的,但我正在尝试循环遍历数据中的所有列,我知道使用~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({
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])
}
库(比例)
factorVars您正在for
循环中传递字符串,而{{}
不能处理字符串(如预期的那样)
要使代码在For
循环中工作,请将函数更改为
tidy_eval_arrange <- function(.data, var) {
tidydata <- .data %>%
count(.data[[var]]) %>%
mutate(pct = n / sum(n),
pctlabel = paste0(round(pct * 100), "%"))
print(tidydata)
}
tidy\u eval\u arrange%
突变(pct=n/和(n),
pctlabel=paste0(圆形(pct*100),“%”)
打印(潮汐数据)
}
如果我们使用ensym
转换为sym
bol并计算(!!
),则可以传递字符串或不带引号
什么是df
?您能提供一些示例数据,以便我们能够解决您的问题吗?嗨@Joe Roe,df是我们将要测试的数据帧。这确实有效,有趣的是,括号的正确使用带来了很大的差异。谢谢@Ronak
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 <- function(.data, var) {
tidydata <- .data %>%
count(.data[[var]]) %>%
mutate(pct = n / sum(n),
pctlabel = paste0(round(pct * 100), "%"))
print(tidydata)
}
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)
}
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%