'sum`的经典案例返回NA,因为它没有对NA进行求和

Naz*_*zer 5 r

我试图sum在函数中使用,但结果是NA,我认为可能是由于整数溢出.但我使用的数字类是数字.

功能最简单

sum((columnA-columnB)^2)
Run Code Online (Sandbox Code Playgroud)

来自columnA的值是0.1376146来自columnB的值0.272

是小数位的不同长度?我知道如何更改显示的内容,但我不确定这会改变R使用的内容sum.

Bar*_*nka 13

在Joshua Ulrich的评论之后,在说你有一些溢出问题之前,你应该回答这些问题:

  1. 你总结了多少元素?R可以处理大量的条目
  2. 你的载体中的值有多大?R再次可以处理相当大的数字
  3. 你在计算整数或浮点数吗?如果要对浮点数求和,则不能有整数溢出(浮点数不是整数)
  4. 你有NA数据吗?如果你用NAs存在的任何东西加总,结果将是NA,除非你正确处理它.

那说,一些解决方案:

  • 使用sum(..., na.rm=T) 忽视NA从你的对象秒(这是简单的解决方案)
  • 仅汇总非NA条目:( sum(yourVector[!is.na(yourVector)]不是那么简单)
  • 如果要从数据帧中对一列进行求和,请在求和前对数据帧进行子集化:( sum(subset(yourDataFrame, !is.na(columnToSum))[columnToSum])这就像使用大炮杀死一只蚊子一样)

  • 只是在这里添加一个微妙的地方。如果所有值均为NA,则使用na.rm = T,则总和为零。如果您想返回NA(但仍然忽略它们是否不是全部NA),请对!is.na使用“不是那么简单的”解决方案。 (2认同)