gpt4 book ai didi

r - 可以使用 float 作为索引或在 R 中创建因子吗?

转载 作者:行者123 更新时间:2023-12-01 01:28:43 24 4
gpt4 key购买 nike

可以使用浮点数作为索引或在 R 中创建因子吗?

我的意思不是带小数部分的数字;这显然是奇怪的,但实际上是整数的数字(即对用户而言),但被存储为浮点数。

例如,我经常使用像 (1:3)*3 这样的结构。或 seq(3,9,by=3)作为索引,但您会注意到它们实际上被表示为浮点数,而不是整数,即使对我来说,它们确实是整数。

另一种可能出现的情况是从文件读取数据时;如果文件将整数表示为 1.0、2.0、3.0 等,R 会将它们存储为浮点数。

(我在下面发布了一个答案,并举例说明了为什么应该小心,但是如果像上面这样的简单结构会引起麻烦,它并没有真正解决。)

(这个问题的灵感来自 this question ,其中 OP 创建了整数以用作因子的编码级别,但它们被存储为浮点数。)

最佳答案

如果可以,最好使用整数表示。例如,使用 (1L:3L)*3Lseq(3L,9L,by=3L) .

我可以举一个例子,其中浮点表示给出了一个意想不到的答案,但这取决于实际进行浮点运算(即数字的小数部分)。我不知道直接在浮点数中存储一个整数,然后再进行乘法,如原始帖子中的两个示例,是否会导致问题。

这是我有点被迫的例子来表明浮点可以给出有趣的答案。我制作了两个浮点表示不同的 3;第一个元素并不完全等于三(无论如何,在我的 R 2.13.0 系统上)。

> (a <- c((0.3*3+0.1)*3,3L))
[1] 3 3
> a[1] == a[2]
[1] FALSE

创建因子直接按预期工作,因为 factor电话 as.character对它们具有相同的结果。
> as.character(a)
[1] "3" "3"
> factor(a, levels=1:3, labels=LETTERS[1:3])
[1] C C
Levels: A B C

但是将其用作索引并不能按预期工作,因为当它们被强制为整数时,它们会被截断,因此它们变为 2 和 3。
> trunc(a)
[1] 2 3
> LETTERS[a]
[1] "B" "C"

关于r - 可以使用 float 作为索引或在 R 中创建因子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6155643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com