【发布时间】:2015-01-27 00:34:43
【问题描述】:
下面我有一个我希望函数执行的工作示例,然后为函数编写脚本,注意错误发生的位置。
错误信息是:
Error: index out of bounds
我知道这通常意味着 R 找不到被调用的变量。
有趣的是,在下面的函数示例中,如果我只按我的 subgroup_name 分组(传递给函数并成为新创建的数据框中的一列),该函数将成功地重新组合该变量,但我也想按名为变量的新创建的列(来自熔体)分组。
以前使用regroup() 为我工作的类似代码,但已被弃用。我正在尝试使用group_by_(),但无济于事。
我已经阅读了许多其他帖子和答案,并且今天尝试了几个小时,但仍然没有成功。
# Initialize example dataset
database <- ggplot2::diamonds
database$diamond <- row.names(diamonds) # needed for melting
subgroup_name <- "cut" # can replace with "color" or "clarity"
subgroup_column <- 2 # can replace with 3 for color, 4 for clarity
# This works, although it would be preferable not to need separate variables for subgroup_name and subgroup_column number
df <- database %>%
select(diamond, subgroup_column, x,y,z) %>%
melt(id.vars=c("diamond", subgroup_name)) %>%
group_by(cut, variable) %>%
summarise(value = round(mean(value, na.rm = TRUE),2))
# This does not work, I am expecting the same output as above
subgroup_analysis <- function(database,...){
df <- database %>%
select(diamond, subgroup_column, x,y,z) %>%
melt(id.vars=c("diamond", subgroup_name)) %>%
group_by_(subgroup_name, variable) %>% # problem appears to be with finding "variable"
summarise(value = round(mean(value, na.rm = TRUE),2))
print(df)
}
subgroup_analysis(database, subgroup_column, subgroup_name)
【问题讨论】:
-
@Richard Scriven - 我想我是,在代码的最后一行调用函数:subgroup_analysis(database, subgroup_column, subgroup_name)。但是,应该/可能直接传递“cut”和 2 而不是代理变量。如果我遗漏了什么,请告诉我,感谢您的关注
-
是的,很抱歉我没有看到最后的电话。您确定要使用点
...而不是命名参数来执行此操作吗? -
我很乐意使用命名参数,我也用这种方式进行了实验。阅读有关 group_by_ 的内容会导致对...进行修补,但我对它们没有那么有经验。
-
不应该是
group_by_(subgroup_name, quote(variable)) -
附带说明,如果您打算将结果分配给一个新变量,那么您可能希望删除最后的
print调用并只写df,或者甚至不分配df在函数中。否则,即使您执行x <- subgroup_analysis(...),结果也会打印出来