R 正在尝试创建用于应用此函数的循环

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({

函数本身是有效的,但我正在尝试循环遍历数据中的所有列,我知道使用~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])
}
库(比例)

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%