2015-05-26 78 views
0

我想輸出矩陣的行但我想省略NaN和NA。下面簡單的例子說明:從矩陣中省略NA/NaN

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但沒有喜悅的各種組合。誰能幫忙?

回答

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") 
} 
0
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") 
} 

下面是一個使用的解決方案is.na()。

輸出:

1:1.000000 2:-1.000000 
1:2.000000 2:-1.000000 
1:1.000000 
1:9.000000 
1:1.000000 2:3.000000