从R数据框清单中清除Inf值

问题描述:

我一直在努力与this response(我认为这是一个非常好的构造答案),而不是一个数据框我有一个数据框列表。所以,我一直在努力做到这一点:从R数据框清单中清除Inf值

head(K[[1]]) 
     a b c 
1981 0.76 0.93 NaN 
1982 Inf 0.33 NaN 
1983 0.25 Inf NaN 
1984 0.77 0.73 Inf 
1985 Inf 0.85 Inf 
1986 0.63 0.56 NaN 

K <- lapply(seq_along(K), function(i) for (j in 1:3) set(K[[i]], which(is.infinite(K[[i]][[j]])), j, NA)) 

这基本上它应该在列表中的K每个元素来代替天道酬勤值,但我只得到这样的结果:

str(K) 

List of 200 
$ : NULL 
$ : NULL 
$ : NULL 
$ : NULL 
... 

for函数内部的循环在隔离时起作用,但我无法获得无限数据框的列表。

有什么建议吗? 此致敬礼。

+0

检查您的匿名函数的返回值。 – ikop

如果K是数据框的列表,则会生成一个新的清理过的data.frames列表。 Inf2NA函数用NA来替换矢量v中的所有无限值。

Inf2NA <- function(v) replace(v, is.infinite(v), NA) 
lapply(K, function(d) replace(d, TRUE, sapply(d, Inf2NA))) 

如果它是足以创造矩阵的名单,然后这个较短的版本就足够了:

lapply(K, function(d) sapply(d, Inf2NA)) 
+0

谢谢G.格洛腾迪克。有效。 – noriega