我想知道为什么我不能将 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 值?
这是一种方法,使用lapply
和ifelse
:
# 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)。
归档时间: |
|
查看次数: |
4089 次 |
最近记录: |