我使用 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]
产生警告:
Warning messages 1: In max(x, na.rm = T) : no non-missing arguments to max; returning -Inf 2: In max(x, na.rm = T) : no non-missing arguments to max; returning -Inf
同时:
test2 <- df[,ifelse(any(!is.na(x)),max(x,na.rm = T),as.numeric(NA)),by = ID]
不要。两个结果是相同的:
identical(test1,test2)
[1] TRUE
结果中没有-Inf。这是什么意思?
最佳答案
使用if/else
可能会更好,因为输入的length
1
df[, if(any(!is.na(x))) max(x, na.rm = TRUE) else NA_real_, by = ID]
关于r - data.table fifelse 给出错误警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65833177/