R:整型与数值型的区别

7

也许此问题已经有人回答过,但我没有看到答案。

我有一个数据集,其中包含数字和缺失值。其中一行是一个百分比。下面是一个小的虚假数据集,其中AA、BB和CC是列名。这个数据集的第三行是百分比。

   AA    BB    CC
  234   432    78
 1980  3452  2323
 91.1    90  93.3
   34   123    45

在这种情况下,当我读取数据集时,AA和CC是数字,BB是整数。我猜90.0在某个地方被四舍五入为90。如果我没有指定BB是数字,这会对基本算术产生影响吗?
我认为,如果dd = 1且ee = 2且两者都是整数,则C语言表示dd / ee = 0,而R表示dd / ee = 0.5。
以下是一系列简单的数学运算,所有这些运算似乎表明无论数据是数字还是整数,答案在R中都不会改变。尽管如此,我仍然认为,在读取数据时指定所有变量都是数字是明智的。使用Google,我找到了一个或两个示例,其中数据类型似乎确实有所不同,但下面没有。
aa <- c(1,2,3,4,5,6,7)
bb <- 2
str(aa)
str(bb)

cc <- as.integer(aa)
dd <- as.integer(bb)
str(cc)
str(dd)

aa/bb
cc/dd
aa/dd
cc/bb

ee <- aa * aa
str(ee)
sum(ee/2)

ff <- cc * cc
str(ff)
sum(ff/2)

gg <- 4.14

hh <- ((aa * aa) * gg) / 2
hh
ii <- ((cc * cc) * gg) / 2
ii

jj <- (aa * aa) / gg
jj
kk <- (cc * cc) / gg
kk
jj == kk

mm <- as.integer(1)
nn <- as.integer(2)
mm/nn

我想我希望获得一些确定,这可能不是简单数学问题,但我怀疑它确实是。我一直在思考编程的基本规则,但我不确定那是什么。(我知道双精度的概念。)

非常感谢任何关于这个基础问题的建议。

1个回答

7
使用/运算符进行除法计算将始终返回一个“数字”,即等同于C语言的“double”。分子和分母首先被强制转换为数字,然后进行除法计算。如果要使用整数除法,则可以使用%/%。如果你想创建一个整数,那么你可以使用truncfloor,或者使用round(x,0)或使用as.integer。这些选项中的第一、第二和第四个是等效的。尽管打印出来的表示形式为整数,但round函数仍将返回“numeric”。只要你满意于“double”/“numeric”结果,我认为你无需担心。好吧,我们甚至允许除以0。
你的“aa”变量被分类为“numeric”,尽管它是作为一堆整数输入的,但如果你使用以下方式:
aa <- 1:8  # sequences are integer class.

看起来您对常见问题解答 7.31并不会感到太惊讶。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接