2015-04-15 6 views
5

В Matlab существует функция spy, которая отображает структуру разреженной матрицы. Он создает график размеров матрицы, где каждая запись, имеющая ненулевое значение, окрашивается. Существует ли эквивалентная функция в R?R эквивалент функции шпиона Matlab

+0

Можете ли вы включить [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) с образцом объекта R, который вы хотите построить ? – MrFlick

+0

Как в стороне, функция Matlab 'spy()' включает в себя интересную небольшую функцию, которая, я уверен, не будет реплицирована в R. Попробуйте представить 'spy()' без аргументов в Matlab. –

+0

@AlexA. см. обновление. – alexforrence

ответ

8

image() от Matrix - один вариант.

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


Чтобы получить выход spy() в R, это занимает немного больше работы.

В 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); 

И в R:

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

enter image description here

0

простая функция, которая дублирует функции Matlab шпион() в R, на основе выше идеи, является:

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

Это может быть полезно для некоторых приложений.

Смежные вопросы