使用dtplyr时group_by()%>%sample_n()报错:参数类型(closure)无效
解决dtplyr分组抽样时
max(count)报错的问题 问题原因
你遇到的Error in max(count) : invalid 'type' (closure) of argument报错,本质是列名count和dplyr的count()函数重名,在dtplyr的延迟计算环境中,R优先把count识别成了dplyr的count()函数(函数属于closure类型),而非数据中的列。
无需转换对象的解决办法
1. dplyr风格写法:用.data代词明确指定列
通过.data代词告诉R我们要引用的是数据框中的count列,而非同名函数:
library(dtplyr) library(dplyr) # 示例数据 df <- tibble(id = rep(1:3, each = 5), count = c(3,3,3,6,6,2,2,2,2,2,4,4,4,4,4)) df_lazy <- lazy_dt(df) # 正确的分组抽样代码 result <- df_lazy %>% group_by(id) %>% sample_n(max(.data$count), replace = TRUE) %>% collect() # 如需查看结果再执行collect,不需要的话可以保留lazy状态
2. data.table风格写法:用get()函数引用列
在data.table语法的上下文中,用get("count")明确获取列值,避免函数名冲突:
result <- df_lazy[, .SD[sample(.N, max(get("count"), .N), replace = TRUE)], by = id] %>% collect()
额外说明
如果你的count列是通过变量传递的(而非硬编码的列名),可以用.data[[变量名]]的方式引用,比如:
sample_col <- "count" result <- df_lazy %>% group_by(id) %>% sample_n(max(.data[[sample_col]]), replace = TRUE) %>% collect()
内容的提问来源于stack exchange,提问作者marine-ecologist
相关产品推荐
相关产品推荐

