R语言计算数组所有配对绝对差之和colSums维度报错求助
解决方案
1. 报错原因说明
你遇到的报错:
Error in colSums(FC_TS1test1, dims = 1) : 'x' must be an array of at least two dimensions
触发原因是colSums()函数要求输入对象必须是二维及以上的数组、矩阵或数据框,如果你传入的是一维向量、或是每列以列表格式存储单个数组的 data frame,都会触发该报错。
2. 单数组计算逻辑实现
我们可以先封装一个匹配你需求的计算函数,用outer()生成所有元素两两相减的矩阵,取绝对值后直接求和即可:
# 自定义计算函数 calc_total_abs_diff <- function(arr) { sum(abs(outer(arr, arr, FUN = "-"))) } # 测试你的示例数组 test_array <- c(5, 3, 1) calc_total_abs_diff(test_array) # 输出结果为16,和你给出的计算结果完全一致
3. 多列批量计算方案
针对你的 data frame 多列计算需求,用apply系列函数批量调用自定义函数即可,不需要用colSums:
# 假设你的原始数据框名为FC_TS1test1,每列都是待计算的数值数组 col_diff_result <- sapply(FC_TS1test1, calc_total_abs_diff)
如果你的数据框列存储的是列表格式的数组,调整代码如下:
col_diff_result <- sapply(FC_TS1test1, function(col) calc_total_abs_diff(unlist(col)))
得到的col_diff_result就是每列对应的绝对差总和,你可以根据需求直接合并回原数据框。
内容的提问来源于stack exchange,提问作者Theresa_S
相关产品推荐
相关产品推荐

