2015-04-15 5 views
5

In Matlab, esiste una funzione denominata spia, che visualizza la struttura di una matrice sparsa. Crea un grafico delle dimensioni della matrice in cui ogni voce con un valore diverso da zero viene colorata. Esiste una funzione equivalente in R?equivalente R della funzione spia di Matlab

+0

È possibile includere un [esempio riproducibile] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) con un oggetto campione R che si desidera stampare ? – MrFlick

+0

Per inciso, la funzione Matlab 'spy()' include una funzione divertente che sono sicuro che non verrà replicata in R. Prova a inviare 'spy()' senza argomenti in Matlab. –

+0

@AlexA. vedi aggiornamento. – alexforrence

risposta

8

image() da Matrix è un'opzione.

library(Matrix) 

# Example from ?Matrix:::sparseMatrix 
i <- c(1,3:8); j <- c(2,9,6:10); x <- 7 * (1:7) 
A <- sparseMatrix(i, j, x = x) 

print(A) 
##8 x 10 sparse Matrix of class "dgCMatrix" 

##[1,] . 7 . . . . . . . . 
##[2,] . . . . . . . . . . 
##[3,] . . . . . . . . 14 . 
##[4,] . . . . . 21 . . . . 
##[5,] . . . . . . 28 . . . 
##[6,] . . . . . . . 35 . . 
##[7,] . . . . . . . . 42 . 
##[8,] . . . . . . . . . 49 

image(A) 

enter image description here


per ottenere il risultato di spy() in R, ci vuole un po 'più di lavoro.

In MATLAB (2011b):

spy() 
h = gcf; 
axObj = get(h, 'Children'); 
datObj = get(axObj, 'Children'); 

xdata = get(datObj,'XData'); 
ydata = get(datObj,'YData'); 
spyMat = [xdata; ydata]; 
csvwrite('spydat.csv',spyMat); 

E in R:

library(Matrix) 
spyData <- read.csv("spydat.csv") 
spyMat <- t(sparseMatrix(spyData[1,],spyData[2,])) 
image(spyMat) 

enter image description here

0

una semplice funzione che duplica la funzione Matlab spia() in R, sulla base di sopra idee, è:

library(Matrix) 
    spy <- function(w){ 
    # Get indices not equal to zero 
    inds <- which(w != 0, arr.ind=TRUE) 
    # Create sparse matrix with ones where not zero 
    A <- sparseMatrix(inds[,1], inds[,2], x = rep(1,nrow(inds))) 
    # 
    image(A)) 
    } 

Questo può essere utile per alcune applicazioni.