【发布时间】: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