R 如何基于自定义函数将NA移除合并到聚合中?

R 如何基于自定义函数将NA移除合并到聚合中?,r,function,aggregate,na,R,Function,Aggregate,Na,这是我第一次使用任何自定义函数,请耐心等待。我为标准错误创建了一个函数,我想与aggregate一起使用。在我试图排除NAs之前,它一直有效 要使用的虚拟数据帧: se <- function(x) sd(x)/sqrt(length(x)) df <- data.frame(site = c('N','N','N','S','S','S'), birds = c(NA,4,2,9,3,1), worms = c(2,

这是我第一次使用任何自定义函数,请耐心等待。我为标准错误创建了一个函数,我想与
aggregate
一起使用。在我试图排除NAs之前,它一直有效

要使用的虚拟数据帧:

se <- function(x) sd(x)/sqrt(length(x))
df <- data.frame(site = c('N','N','N','S','S','S'),
                birds = c(NA,4,2,9,3,1), 
                worms = c(2,1,2,4,0,5))
means <- aggregate(df[,2:3], na.rm = T, list(site = df$site), FUN = mean)
error <- aggregate(df[,2:3], na.rm = T, list(site = df$site), FUN = se)

se问题在于,在
se
函数中没有
na.rm
的显式参数。如果将其添加到函数中,它应该可以工作:

se <- function(x, na.rm = TRUE) {
    sd(x, na.rm = na.rm)/sqrt(sum(!is.na(x)))
}

se我尝试使用此代码,但出现了“意外括号”错误。从脚本复制代码时,我忘记了一个括号。编辑后的功能应该可以使用,谢谢!我能够让这部分代码正常工作,但现在其他地方出现了错误。使用此方法是否意味着无论何时使用
se
,我都需要指定
na.rm
?您可以为参数指定默认输入(请参见上面的编辑)。然后,如果您希望使用的是
na.rm=TRUE
,则不需要在代码的其他部分调用它。