R中apply函数FUN参数能否传入多个函数计算数据框列的均值、中位数和标准差
首先你当前的写法存在两处错误:
apply的FUN参数仅支持传入单个函数,不能直接传入c(mean, median, sd)这种函数向量MARGIN参数用于指定运算维度,1为按行计算、2为按列计算,不能传入mtcars[i]这种数据子集,目标列筛选需要放在X参数位置
推荐实现方案(输出直接为列表格式,符合你的需求)
用lapply实现适配性更好,不会出现apply自动把数据框转成矩阵导致的类型异常问题,示例代码如下:
data(mtcars) # 填入你要计算的目标列索引,示例选mpg、disp、hp三列 i <- c(1, 3, 4) # 自定义统计函数,一次性计算三个指标,增加na.rm参数兼容含缺失值的场景 calc_stats <- function(x) { c( mean = mean(x, na.rm = TRUE), median = median(x, na.rm = TRUE), sd = sd(x, na.rm = TRUE) ) } # 对指定列应用统计函数,直接返回列表结果 res <- lapply(mtcars[i], FUN = calc_stats) # 输出结果 res
运行后输出效果和你预期一致:
$mpg mean median sd 20.09062 19.20000 6.02695
如果必须使用apply函数,可按以下写法调整,最终转成列表格式即可:
res_apply <- apply(mtcars[i], MARGIN = 2, FUN = calc_stats) res <- as.list(data.frame(t(res_apply)))
内容的提问来源于stack exchange,提问作者Helan.ge
相关产品推荐
相关产品推荐

