gpt4 book ai didi

r - 数据框和 is.nan()

转载 作者:行者123 更新时间:2023-12-03 12:14:50 26 4
gpt4 key购买 nike

我正在使用 sum(is.na(my.df))检查我的数据框是否包含任何 NA,它按我的预期工作,但是 sum(is.nan(my.df))没有按我预期的那样工作。

> my.df <- data.frame(a=c(1, 2, 3), b=c(5, NA, NaN))
> my.df
a b
1 1 5
2 2 NA
3 3 NaN
> is.na(my.df)
a b
[1,] FALSE FALSE
[2,] FALSE TRUE
[3,] FALSE TRUE
> is.nan(my.df)
a b
FALSE FALSE
> sum(is.na(my.df))
[1] 2
> sum(is.nan(my.df))
[1] 0

哦亲爱的。
行为不一致是否有原因?是因为执行不力,还是有意为之? is.nan(my.df)的返回值是什么表示?是否有充分的理由不使用 is.nan()在整个数据框上?

is.na( ) 的文档中和 is.nan( ) ,参数类型似乎相同(尽管它们没有专门列出数据框):
is.na() : x 要测试的 R 对象:默认方法处理原子向量、列表和配对列表。 is.nan() : x 要测试的 R 对象:默认方法处理原子向量、列表和配对列表。

最佳答案

来自 ?is.nan :

All elements of logical,integer and raw vectors are considered not to be NaN, and
elements of lists and pairlists are also unless the element is a length-one numeric
or complex vector whose single element is NaN.

数据框的列在技术上是“列表的元素”,所以 is.nan(df)返回一个长度等于数据帧列数的向量,即 TRUE仅当该列包含单个 NaN 时元素:
> is.nan(data.frame(a=NaN,b=NA,c=1))
a b c
TRUE FALSE FALSE

如果您想要与 is.na 匹配的行为, 使用 apply :
sum(apply(my.df,2,is.nan))

答案是 1 而不是 2 因为 is.nan(NA)FALSE ...

编辑 :或者,您可以将数据框转换为矩阵:
 sum(is.nan(as.matrix(my.df)))

更新 :在 R 版本 2.14(2011 年 10 月)中提出问题后不久(两个月),此行为发生了变化:来自 NEWS file ,

o The default methods for is.finite(), is.infinite() and is.nan() now signal an error if their argument is not an atomic vector.

关于r - 数据框和 is.nan(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7031127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com