参数未正确传递到R中的函数

yb3bgrhw  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(107)

我已经写了我的第一个函数,但是它不工作。我得到了错误:错误:运行函数时列var1未知。
编辑:下面的代码是一个更大的代码块的一部分,它也产生图形,但这部分工作。
代码:

# Creating dummydata
a <- sample(letters[1:5], 500, rep = TRUE)
b <- sample(1:10, 500, rep = TRUE)
df1 <- data.frame(a, b)

create_barchart <- function(data, var1, var2) {
  # Creating summary statistics
  df <- data %>%
    group_by(var1, var2) %>%
    summarise(n=n()) %>%
    group_by(var1) %>%
    mutate(perc=100*n/sum(n))
}

create_barchart(df1, a, b)
k4ymrczo

k4ymrczo1#

var1var2周围放置{{...}}并删除df <-。建议使用ungroup终止group_by
还要注意,count({{var1}}, {{var2}})可以用来代替group_by({{var1}}, {{var2}}) %>% summarize(n = n()) %>% ungroup

library(dplyr)

create_barchart <- function(data, var1, var2) {
  # Creating summary statistics
  data %>%
    group_by({{var1}}, {{var2}}) %>%
    summarise(n=n()) %>%
    ungroup %>%
    group_by({{var1}}) %>%
    mutate(perc=100*n/sum(n)) %>%
    ungroup
}

create_barchart(df1, a, b)
sr4lhrrt

sr4lhrrt2#

除了Grothendieck的答案之外,您还可以使用enquo()-!!(发音为“Bang Bang”)对

create_barchart <- function(data, var1, var2) {
  var1 <- enquo(var1)
  var2 <- enquo(var2)
  # Creating summary statistics
  df <- data %>%
    group_by(!!var1, !!var2) %>%
    summarise(n=n()) %>%
    group_by(!!var1) %>%
    mutate(perc=100*n/sum(n))
  return(df)
}

create_barchart(data = df1, var1 = a, var2 = b)

有关更深入的说明,您还可以查看blog post

相关问题