【发布时间】:2018-11-26 19:22:04
【问题描述】:
我正在处理函数。我为 Basal Area 写了一个函数
ba <- function(dbh,na.rm) {
stopifnot(is.numeric(dbh))
answer <- dbh^2*(0.005454)
return(answer)
}
该函数适用于测试向量。现在我正在尝试对我拥有的数据集做一些总结。
(直接从R复制粘贴)
plot.summary <- trees %>% group_by(MU, Plot, Inv) %>% summarize(year = first(Year), arithemtic.mean = my.mean(dbh, na.rm = TRUE), quadratic.mean = my.q.mean(dbh, na.rm = TRUE), var = my.var(dbh, na.rm = TRUE), n.trees = n())
(修改间距以方便阅读)
plot.summary <- trees %>% group_by(MU, Plot, Inv) %>%
summarize(year = first(Year), arithemtic.mean = my.mean(dbh, na.rm = TRUE),
quadratic.mean = my.q.mean(dbh, na.rm = TRUE), var = my.var(dbh, na.rm = TRUE),
n.trees = n())
当我运行时它会说
Error in summarise_impl(.data, dots) :
Column `basal.area` must be length 1 (a summary value), not 19
我不知道为什么。数据集只有 18 列。 当我不包括基底区域部分时,我的命令可以正常工作。
我不确定我可能会错过什么
感谢您的帮助!
【问题讨论】:
-
看起来你的函数返回一个向量,只要它的输入。
summarize用于返回单个值的聚合函数(如mean)。因此,当您得到长度为19而不是预期长度1的结果时,您会收到错误“Columnbasal.areamust be length 1 (a summary value), not 19”。您可以使用mutate而不是summarize来保持相同的行数,而不是将数据聚合到每组 1 行。 -
因此,由于我首先对一些数据进行分组,因此我的函数试图为每一行获取一个单独的基底区域,现在为每个“组”平均它?
-
我也尝试做 mutate
plot.summary <- trees %>% group_by(MU, Plot, Inv) %>% summarize(year = first(Year), arithemtic.mean = my.mean(dbh, na.rm = TRUE), quadratic.mean = my.q.mean(dbh, na.rm = TRUE), var = my.var(dbh, na.rm = TRUE), n.trees = n()) %>% mutate(basal.area = ba(dbh, na.rm= TRUE))并且 R 返回了Error in mutate_impl(.data, dots) : Column 'basal.area' must be length 3 (the group size) or one, not 4 -
您能否发布一些示例数据以及您想要的结果? 2 组,每组 2-3 行应该足够了。