【问题标题】:data.table fifelse giving wrong warning?data.table fifelse 给出错误警告?
【发布时间】:2021-04-26 05:06:51
【问题描述】:

我发现使用来自data.table 库的fifelse 的警告差异:

set.seed(123)
df <- data.table(ID = rep(1:10,each = 2),x = sample(c(1,NA),20,replace = T))

test1 <- df[,fifelse(any(!is.na(x)),max(x,na.rm = T),as.numeric(NA)),by = ID]

产生警告:

警告信息 1:在 max(x, na.rm = T) 中:max 没有非缺失参数;返回-Inf 2:在 max(x, na.rm = T) 中:max 没有非缺失参数;返回 -Inf

同时:

test2 <- df[,ifelse(any(!is.na(x)),max(x,na.rm = T),as.numeric(NA)),by = ID]

不要。而且这两个结果是一样的:

identical(test1,test2)
[1] TRUE

结果中没有-Inf。这是什么意思?

【问题讨论】:

  • 只是猜测。错误消息来自 max() 函数。我会由此推断,对于 fifelse,函数 max() 正在为所有组运行,即使条件 any(!is.na(x)) 为 FALSE,而对于 ifelse,它仅在为 TRUE 时才运行?

标签: r data.table warnings


【解决方案1】:

最好使用if/else,因为输入是length 1

df[, if(any(!is.na(x))) max(x, na.rm = TRUE) else NA_real_, by = ID]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多