gpt4 book ai didi

r - "NAs introduced by coercion":带有 data.table::fifelse 的警告 - 但输出中没有 NA

转载 作者:行者123 更新时间:2023-12-03 08:49:34 25 4
gpt4 key购买 nike

在使用 fifelse 通过引用更新列时,我对以下警告感到困惑。

Warning in fifelse(char == "PL", 2, as.numeric(char)): NAs introduced by coercion

但是没有NA!!

str(mydt) 显示类到数字的转换已成功。

谁能解释一下吗?

library(data.table)
mydt <- data.table(char = c('1','PL'))
mydt[, newcol := fifelse(char == 'PL', 2, as.numeric(char))]
#> Warning in fifelse(char == "PL", 2, as.numeric(char)): NAs introduced by
#> coercion
mydt
#> char newcol
#> 1: 1 1
#> 2: PL 2

reprex package于2020年1月20日创建(v0.3.0)

devtools::session_info()
#> data.table * 1.12.6 2019-10-18 [1] CRAN (R 3.6.1)

最佳答案

它与 fifelse 无关,因为当应用于非数字元素时,即当 as 时,它是 as.numeric 的属性。 numeric(char),非数字元素被强制为 NA

as.numeric(c("1", "PL"))
#[1] 1 NA

Warning message: NAs introduced by coercion

根据?fifelse,用法是

fifelse(test, yes, no, na=NA)

yes, no - Values to return depending on TRUE/FALSE element of test. They must be the same type and be either length 1 or the same length of test.

因此,as.numeric 在整个列上被称为“无”参数,它确保它在整个列上而不是其一部分上发生变化


如果我们不想要警告,请将 as.numeric 包装在 fifelse 外部或使用 replace

mydt[, newcol := as.numeric(replace(char, grepl('\\D', char), 2))]

或者

mydt[, newcol := as.numeric(fifelse(char == 'PL', '2', char))]

fifelse 是特定于类型的,因此,如果我们为"is"、“否”指定不同的类型,它会提示。该选项是将“yes”与字符“2”一起使用,然后将 as.numeric 应用于 fifelse

的输出

关于r - "NAs introduced by coercion":带有 data.table::fifelse 的警告 - 但输出中没有 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59828203/

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