R语言apply函数返回扩展矩阵遇阻:如何保留多列结果?
问题解答
可以通过apply()实现你的需求,但需要调整结果的处理方式,原因和解决方案如下:
问题原因
默认情况下,apply()的simplify=TRUE参数会尝试将函数返回的结果自动简化为数组。当你的自定义函数返回10×2的矩阵时,apply()可能会错误地调整结果维度,导致你期望的列被“截断”或结构不符合预期。
解决方案
方法1:关闭apply()的自动简化,再合并结果
修改apply()调用时添加simplify=FALSE,让它返回一个列表(每个元素是对应列处理后的10×2矩阵),再用do.call(cbind, ...)将列表中的矩阵按列绑定,得到10×6的最终矩阵:
# 自定义函数不变 data_matrix <- function(column) { polynomial <- poly(column, degree=2, raw=TRUE) return(polynomial) } # 用apply返回列表,再合并 poly_matrix_list <- apply(test_data, 2, data_matrix, simplify = FALSE) poly_matrix <- do.call(cbind, poly_matrix_list)
方法2:用lapply()替代apply()(更简洁)
lapply()本身会返回列表,无需额外设置参数,直接处理数据框的每一列后合并:
poly_matrix <- do.call(cbind, lapply(test_data, data_matrix))
验证结果
运行上述代码后,poly_matrix的维度应为10×6,每两列对应原始数据框中一列的二次多项式展开结果。
内容的提问来源于stack exchange,提问作者KJG
相关产品推荐
相关产品推荐

