为何使用sapply处理矩阵数据后得到NaN值?求解决方法
问题原因与解决方法
为什么会出现NaN?
你用sapply处理矩阵时,它会逐个提取矩阵的每个元素作为参数传入自定义函数。对于单个数值来说,min(x)和max(x)都是它本身,分母max(x)-min(x)等于0,除以0就会得到NaN。
解决方案
根据你的需求,分两种情况处理:
1. 对整个矩阵的所有值做归一化(缩放到0-1区间)
直接对整个矩阵进行向量式运算即可,不需要循环/遍历:
datas <- as.matrix(rnorm(100, mean=90, sd=5)) normalized_datas <- (datas - min(datas)) / (max(datas) - min(datas))
2. 按行/列单独做归一化
如果需要按行或列分别归一化,用apply代替sapply:
- 按列归一化:
normalized_cols <- apply(datas, 2, function(x) (x - min(x)) / (max(x) - min(x))) - 按行归一化:
normalized_rows <- apply(datas, 1, function(x) (x - min(x)) / (max(x) - min(x)))
内容的提问来源于stack exchange,提问作者Main
相关产品推荐
相关产品推荐

