You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:32:01