gpt4 book ai didi

r - is.integer() 在重新赋值中的行为

转载 作者:行者123 更新时间:2023-12-04 11:31:14 25 4
gpt4 key购买 nike

让我们创建一个整数向量,并为其第一个元素分配一个整数值,然后将其重新分配给一个非整数。

> int = integer(0)
> int[1]
> NA
> is.integer(int)
[1] TRUE

# assign int[1] to an integer
> int[1] = 1L
> is.integer(int)
[1] TRUE
# Now, re-assign to a non-integer
> int[1] = 1
> is.integer(int)
[1] FALSE # as expected

现在,让我们以相反的顺序做同样的事情,即首先分配一个非整数,然后重新分配一个整数。
# try again assigning to a non-integer first
> int = integer(0)
> int[1] = 1
> is.integer(int)
[1] FALSE
# Now, assigning to integer
> int[1] = 1L
> is.integer(int)
[1] FALSE # why?

上次评估的类型是否取决于之前的分配?

最佳答案

我会用不同的方式表达你所看到的行为:

x <- 1:2
> storage.mode(x)
[1] "integer"
> x <- x + 0.5
> storage.mode(x)
[1] "double"
> x
[1] 1.5 2.5
> storage.mode(x) <- "integer"
> x
[1] 1 2

一般来说,要求 R 将事物转换回整数会冒着丢失信息的风险。因此,一旦分配强制转换为双倍,除非您明确要求(这是一件好事),否则无法返回。

您选择的具体示例依赖于只有一个值,但 R 并没有真正的标量类型,所以一切都必须从向量的角度考虑。这意味着许多 R 操作必须意识到事物对整个值向量可能产生的影响。

关于r - is.integer() 在重新赋值中的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25494641/

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