将 is.infinite() 应用于 R 中的数据框的方法

use*_*123 5 r dataframe

我想知道为什么我不能将 is.infinite() 应用于数据帧,就像将 is.na 应用于 R 中的数据帧一样:

data[is.infinite(data)]<-0
Error in is.infinite(data) : 
  default method not implemented for type 'list'

data[is.na(data)] <-0
Run Code Online (Sandbox Code Playgroud)

不会产生错误,但是,is.infinite 上的文档暗示与 is.na? 具有相同的行为。

有谁知道我如何替换 inf 值?

lmo*_*lmo 5

这是一种方法,使用lapplyifelse

# create data.frame
df <- data.frame(a=1:10, b=letters[1:10], c=rnorm(10))
df$a[c(2,6)] <- Inf
df$c[c(3,9)] <- Inf

# take care of those infs:
df[] <- lapply(df, function(i) if(is.numeric(i)) ifelse(is.infinite(i), 0, i) else i)
Run Code Online (Sandbox Code Playgroud)

我认为问题在于 xis.infinite(x)is.na(x)。帮助文件?is.infinite

x待测试的 R 对象:默认方法处理原子向量

而对于?is.na,它说

x要测试的 R 对象:is.na 的默认方法处理原子向量、列表和配对列表:anyNA 的默认方法也处理 NULL。

因此,默认方法is.infinite不处理列表(data.frames),而它们则is.na处理列表(data.frames)。