R语言 数据表中的警告发出与“by”参数不一致?

cgh8pdjw  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(167)

我将使用by参数通过引用生成一个新的data.table列。如果组结果具有不同的数据类型(这里是intnum),则根据组数据类型的顺序,它们将被强制为相同的数据类型(这里是numint)。第一个示例没有生成警告,但第二个示例生成了警告。为什么?
R版本4.0.4
数据表版本1.14.8

library(data.table)
DT <- data.table(a = c("rpois", "rnorm"))

DT[, b := ifelse(a == "rpois", 1L, 1.0), by = "a"]

set.seed(6)
DT[, c := match.fun(a)(1, 1), by = "a"]

str(DT)
zphenhs4

zphenhs41#

我们来看一下警告:

set.seed(6)
DT[, c := match.fun(a)(1, 1), by = "a"]
# Warning message:
# In `[.data.table`(DT, , `:=`(b, ifelse(a == "rpois", 1L, 1.2)),  :
#   Group 2 column 'b': 1.200000 (type 'double') at RHS position 1 # truncated (precision lost) when assigning to type 'integer'

它警告您“精度丢失”。当1.0转换为1时,精度不会丢失,因为它们在数学上相等。如果您的第一个示例确实丢失了精度,您将收到相同的警告:

DT[, b := ifelse(a == "rpois", 1L, 1.2), by = "a"]
# Warning message:
# In `[.data.table`(DT, , `:=`(b, ifelse(a == "rpois", 1L, 1.2)),  :
#   Group 2 column 'b': 1.200000 (type 'double') at RHS position 1 truncated # (precision lost) when assigning to type 'integer'

相关问题