为何sd函数在rapply()中失效?如何计算列表元素的标准差?
解决rapply()计算列表元素标准差报错的问题
问题原因
rapply()默认会递归遍历到列表的最底层原子元素(即每个单独的数值),对单个数值计算标准差时,会触发invalid 'f' argument错误;而mean()对单个数值直接返回该值,因此不会报错。但你的需求是计算列表中每个子向量的标准差,无需递归到单个数值层面。
解决方法
方法1:改用lapply()(推荐,更适配一维列表场景)
直接对列表中的每个子向量计算标准差,返回结构一致的列表:
d3 <- lapply(d, sd)
方法2:调整rapply()参数(坚持使用rapply时)
通过参数限定处理范围,避免递归到单个数值:
- 指定
classes = "numeric",仅处理数值向量:
d3 <- rapply(d, sd, how = "list", classes = "numeric")
- 设置
depth = 1,仅递归到列表第一层元素:
d3 <- rapply(d, sd, how = "list", depth = 1)
验证
用你提供的d列表测试,以上方法均能正确返回每个子向量的标准差,无报错。
内容的提问来源于stack exchange,提问作者mjrf hh
相关产品推荐
相关产品推荐

