在R中对矩阵使用apply计算L1范数时遇错误的问题
解决R中apply计算矩阵列L1范数的报错问题
问题核心原因
你遇到的问题根源在于:apply处理矩阵列时,会自动将每一列转换为向量传递给自定义函数,而norm()函数的type="1"要求输入必须是矩阵。即便你修改了[的默认行为(设置drop=FALSE),也仅影响直接索引矩阵列的场景,apply内部的列提取逻辑不受该修改影响,依然会把列转成向量,因此报错持续出现。
正确解决方案
方案1:在apply的函数中将向量转为矩阵
直接在自定义函数里把传入的向量重新转为矩阵,满足norm()的参数要求:
X <- matrix(data=rnorm(100), nrow=10, ncol=10) apply(X, 2, function(x) norm(matrix(x), type="1"))
方案2:用colSums直接计算(更高效)
矩阵列的L1范数本质是该列所有元素绝对值的和,完全可以用colSums()直接实现,无需调用norm(),代码更简洁且执行效率更高:
colSums(abs(X))
方案3:恢复默认的[行为(可选)
之前修改的[函数可能会干扰后续其他代码的索引逻辑,建议恢复默认设置:
`[` <- old
内容的提问来源于stack exchange,提问作者Sparsity
相关产品推荐
相关产品推荐

