R沿指定维度数组求和时List类型输入报错的转换方法咨询
问题原因
rowSums 仅支持数值型的矩阵/数组作为输入,你当前构造的是带维度属性的列表对象,即便内部存储的都是数值,R也不会自动将其识别为数值数组,因此抛出'x' must be numeric错误。
解决方法
方法1:将现有列表转换为数值数组
如果你必须保留当前先构造列表的逻辑,可以先将列表整体转为数值类型,再恢复原有维度后调用rowSums:
# 列表转数值数组 FtTEST_numeric <- array(as.numeric(FtTEST), dim = dim(FtTEST)) # 沿第4维求和,和MATLAB sum(,4)效果一致 Ftsum <- rowSums(FtTEST_numeric, dims = 3)
方法2:直接构造数值数组(更推荐)
如果没有特殊需求要用到列表存储,完全可以直接创建多维数值数组,省去转换步骤,性能也更好:
# 直接创建4维数值数组,所有元素初始值为1 FtTEST <- array(1, dim = c(2,3,3,16)) Ftsum <- rowSums(FtTEST, dims = 3)
额外注意
你原有代码中列表填充的逻辑存在问题:FtTEST == "NULL"是把空元素当作字符串"NULL"判断,但新建空列表的元素是NULL类型不是字符串,正确的空列表元素判断写法如下:
FtTEST[sapply(FtTEST, is.null)] <- 1
内容的提问来源于stack exchange,提问作者Steffen Schwerdtfeger
相关产品推荐
相关产品推荐

