is.null 函数不识别 NULL 值

is.null function does not identify NULL values

我想计算总资产的对数,如果总资产元素本身为0,我希望r将结果设置为NULL。否则,r会显示-Inf作为结果。 我已尝试按以下方式解决此问题:

at <- c(0.028, 0, 0, 0, 0, 0)
name <- c("comp 1","comp2", "comp3", "comp4", "comp5", "comp6")
df <- as.data.frame(cbind(name, at)) 
df$log_at <- ifelse(is.null(at),  0, log(at))

但是,如果您 运行 这行代码,则带有 log(assets) 的第 2 列将在数据框的每一行中显示 -3.575551 而不是 0,用于总计的 NULL 值资产。另外,我想知道总资产列中有多少个 NULL 值,但是:

sum(is.null(df$at))

会给我 0,所以我想知道为什么 r 不识别 Null 值,因为总资产列中的值都是数字。

我知道,我可以使用以下替代方法,因为总资产的数量相当大,但我想知道为什么上面的代码不起作用。

df$at <- as.numeric(df$at)
df$log_at <-  log(df$at + 1)

希望有人能帮帮我!

NULL 不是 0。检查:

is.null(df$at)
[1] FALSE

因此,如果您想使用 ifelse 转换 at,那么它应该是:

df$log_at <- ifelse(at == 0,  0, log(at))

同样,要找出 at0 的频率:

sum(df$at == 0)