gpt4 book ai didi

r - R 中数据帧的 is.finite() 的意外结果

转载 作者:行者123 更新时间:2023-12-01 23:34:33 24 4
gpt4 key购买 nike

我已经将 is.finite() 用于向量、矩阵等,并且效果很好。我感到困惑的是为什么它似乎为数据框和列表返回 FALSE

比如下面这个例子:

m <- matrix(0, 3, 3)
d <- as.data.frame(m)

is.finite(m)
[,1] [,2] [,3]
[1,] TRUE TRUE TRUE
[2,] TRUE TRUE TRUE
[3,] TRUE TRUE TRUE

is.finite(d)
V1 V2 V3
FALSE FALSE FALSE

很自然地,它对列表具有相同的行为。

我可以理解某个函数是否不适用于特定类型的对象(例如数据框)。除了微不足道的情况(“停止的时钟一天两次正确”--> 具有非有限值的矩阵),我看不到 is.finite() 应该返回的情况任何对数据框或列表有意义的东西。我期望错误而不是 FALSE,或者期望它在应用函数之前将输入强制转换为矩阵。

问题:是否有某种方法可以以有意义的方式对数据框(和列表)使用 is.finite(),或者是否有一些关于它的行为更有意义返回 FALSE 而不是错误?


注1:顺便说一句,这是在文档中:

 All elements of types other than logical, integer, numeric and complex vectors
are false. Complex numbers are finite if both the real and imaginary parts are.

所以,澄清一下这个问题:为什么返回 false,而不是错误?结果是必须在对 is.finite() 的调用之外添加类型检查。

注意 2:只是为了解决一个用例:我正在考虑使用 is.na()is.nan()is.infinite () 用于检查一些数值异常,并决定 is.finite() 可以解决问题,直到我意识到它的行为与数据帧的行为不同 is.na()。这种差异是出乎意料的。


更新 (2011-11-01):R 2.14.0 已发布,其 NEWS 文件报告:is.finite()、is.infinite() 和 is.nan() 现在的默认方法如果他们的参数不是原子向量,则发出错误信号。 谢谢,R-Core 大神们! (注意:Kohske 早些时候曾报告说开发版本中会出现这种情况。消息是现在是发布版本。)

最佳答案

您正在将一个列表向量传递给一个函数,该函数被记录为使用逻辑、整数、数字和复杂元素的向量提供预期结果,并返回 FALSE 和任何其他内容。你应该做这样的事情:

> sapply( d, is.finite)
V1 V2 V3
[1,] TRUE TRUE TRUE
[2,] TRUE TRUE TRUE
[3,] TRUE TRUE TRUE

(顺便说一句:数据框只是带有额外属性的列表。)

将结果与 is.nan 的行为进行比较可能会有所帮助。 is.nanis.finite 都是基于元素的特征。还要查看模式测试(这不是 is.finiteis.nan 测试)提供的方式。这些给出了 is.characteris.numericis.logical 的列表结果。

> sapply(d, is.character)
V1 V2 V3
FALSE FALSE FALSE

关于r - R 中数据帧的 is.finite() 的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734418/

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