参数未正确传递给R函数

时间:2019-10-14 20:53:24

标签: r function

我已经写了我的第一个函数,但是没有用。我收到错误:错误:列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)

2 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:0)

除了格洛腾迪克的答案外,您还可以使用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)

有关更深入的说明,您还可以查看此blogpost。 希望这会有所帮助。