我试图输出矩阵的行,但我想省略NaN和NA。以下简单示例说明:
m <- matrix(c(1,2,NA,NaN,1,-1,-1,1,9,3),5)
for (i in 1:nrow(m)) {
cat(paste(sprintf('%d:%f', 1:ncol(m), m[i, ]), collapse=' '), "\n")
}
输出是这样的:
1:1.000000 2:-1.000000
1:2.000000 2:-1.000000
1:NA 2:1.000000
1:NaN 2:9.000000
1:1.000000 2:3.000000
但我想:
1:1.000000 2:-1.000000
1:2.000000 2:-1.000000
2:1.000000
2:9.000000
1:1.000000 2:3.000000
我一直在尝试!is.na
的各种组合,但没有快乐。有人可以帮忙吗?
答案 0 :(得分:1)
您可以使用is.finite
m <- matrix(c(1,2,NA,NaN,1,-1,-1,1,9,3),5)
f <- apply(m,1,function(x) sum(is.finite(x))) #how many finite in each row
for (i in 1:nrow(m)) {
cat(paste(sprintf('%d:%f', 1:f[i], m[i, ][is.finite(m[i,])]), collapse=' '), "\n")
}
答案 1 :(得分:0)
AlterResult4
这是使用is.na()的解决方案。
输出:
m <- matrix(c(1,2,NA,NaN,1,-1,-1,1,9,3),5)
for (i in 1:nrow(m)) {
row <- m[i,]
row <- row[!is.na(row)]
cat(paste(sprintf('%d:%f', 1:length(row), row), collapse=' '), "\n")
}