从 is.nan 返回不正确的逻辑

Returning incorrect logical from is.nan

我正在分析来自公开数据库的微阵列数据,我的输出是一个将实验数据与对照数据进行比较的对数比矩阵。我发现我的其中一列填充了 NaN 值,因为这种处理没有相应的控制。我的数据框 (fc_initial) 尺寸为 9049 x 647。

> dim(fc_initial)
[1] 9049  647

由 NaN 填充的列是第 580 列

head(fc_initial[,580])
# [1] NaN NaN NaN NaN NaN NaN

summary(is.nan(fc_initial[,580]))
#    Mode    TRUE    NA's 
# logical    9049       0 

当我尝试使用 apply 检查所有列时,R 不正确地 returns 此列的所有 FALSE

fc_num <- apply(fc_initial, 2, is.nan)
summary(fc_num[ ,580])
#    Mode   FALSE    NA's 
# logical    9049       0 

我已经使用 fc_initialfc_num 的视图在视觉上确认了这一点,并且我已经使用 which().[=26= 仔细检查我正在寻找正确的列]

which(fc_num, arr.ind = TRUE)
#  row col

which returns 没有单元格显示为 TRUE

我错过了什么?为什么 R 返回一列 FALSE 用于我目视确认为 TRUE 的一列值?

调用apply时,数据帧被强制转换为矩阵。如果有任何字符列,整个数据帧被强制转换为字符矩阵,所有 NaN 都转换为 NA

df_1 <- data.frame(a=c("a","b","c"), b=c(NaN, NaN,NaN))
df_2 <- data.frame(a=c(1,2,3), b=c(NaN, NaN,NaN))

as.matrix(df_1)

     a   b 
[1,] "a" NA
[2,] "b" NA
[3,] "c" NA

as.matrix(df_2)
     a   b
[1,] 1 NaN
[2,] 2 NaN
[3,] 3 NaN

即兴创作@cactusWoman 和@joran 评论:

## this gives count of nan's by column for your data.frame
sapply(fc_initial, function(y) sum(length(which(is.nan(y)))))