2015-05-02 39 views
5

Co chcę mieć to matryca, w którym każdy elementem jest sprawdzonym z wykazu sama. Zobacz poniższy przykład:Jak utworzyć macierz list w R?

1  2  3 
1 1,2,4 1,2  1 
2 Null 3,4,5,6 1,3 

Widziałem this post, i próbowałem następujące ale mam błąd:

b <- array() 
b[j, i, ] <- A[i] 

gdzie A jest sam wektor. Wystąpił błąd:

Error in b[j, i, ] <- A[i] : incorrect number of subscripts 

Jak należy definiować i dostęp do każdego elementu macierzy i każdy element zawartych listach?

Update1:

b<-matrix(list(),nrow = length(d), ncol =length(c)) 

Error in b[j, i] <- A[i] : replacement has length zero 

Chcę, aby określić, że każdy element jest lista, a następnie spróbuj wypełnić go z różnych liście z różnej długości od zera do n.

Update2:

running what @BondedDust commented : 
b<-matrix(rep(list(),(c*d)),,nrow = length(d), ncol =length(c)) 
Erorr in b[[j*nrow(b)+i]] <- A[i] : attempt to select less than one element 

:

A[1]<-c(3)  F[[1]]<-numeric(0) E[[1]]<-numeric(0) 
A[2]<-c(1)  F[2]<-c(1)   E[2]<-c(1) 
A[3]<-c(1)  F[3]<-c(2)   E[[3]]<-numeric(0) 
A[[4]]<-c(1,3) F[[4]]<-numeric(0) E[[4]]<-numeric(0) 
A[5]<-c(4)  F[5]<-c(4)   E[5]<-c(4) 

A: wartości rzędu 1 F: wiersz 2, E: wiersz 3 (kolumna 5)

te dane nie znajdują się w tej formie i nie są przechowywane gdzie, są wyjściami innej funkcji (funkcja jest w miejscu A[i]). Dane pokazują tylko, jaka dawka wygląda A w sposób powtarzalny, a zatem pokazuje pozycję w macierzy i przywraca wartość error w update2. A[4] jest element kolumny 4 wiersz 2.

+0

@DavidArenburg nie jest' matryca (lista (C (1,2,3))) ', czego potrzebuje? – Molx

+1

_nie_ jest niemożliwe do listy mają elementy w macierzach –

+0

Dokumentacja 'matrycy' nie mówi, że tylko wektory atomowe mogą być podane jako argumenty parametru danych.To tylko mówi, że' as.vector' usunie atrybuty. (Które paski Daty, POSIXct i czynnik Argumenty ich klas.) Jeśli są tylko listami (które są przecież inną formą "wektorów R"), to nie ma przemocy wobec danych –

Odpowiedz

13

Opiera że matryca chociaż metody drukowania nie wyświetla je w sposób można sobie wyobrazić:

matrix(list(c(1,2,4), c(NULL), c(1,2), c(3,4,5,6), c(1), c(1,3)), 2,3) 
#--------- 
    [,1]  [,2]  [,3]  
[1,] Numeric,3 Numeric,2 1   
[2,] NULL  Numeric,4 Numeric,2 

wglądu do pierwszego elementu:

> Mlist <- matrix(list(c(1,2,4), c(NULL), c(1,2), c(3,4,5,6), c(1), c(1,3)), 2,3) 
> Mlist[1,1] 
[[1]] 
[1] 1 2 4 

> is.matrix(Mlist) 
[1] TRUE 
> class(Mlist[1,1]) 
[1] "list" 

Demonstracja tworzenia "macierzy list" z listy:

> will.become.a.matrix <- list(c(1,2,4), c(NULL), c(1,2), c(3,4,5,6), c(1), c(1,3)) 
> is.matrix(will.become.a.matrix) 
[1] FALSE 
> dim(will.become.a.matrix) <- c(2,3) 
> is.matrix(will.become.a.matrix) 
[1] TRUE 
> dim(will.become.a.matrix) 
[1] 2 3 
> class(will.become.a.matrix[1,1]) 
[1] "list" 

Dalsze wymagane demonstracji:

A<- list(); F=list() E=list() 
A[1]<-c(3) ; F[[1]]<-numeric(0); E[[1]]<-numeric(0) 
A[2]<-c(1) ; F[2]<-c(1) ;  E[2]<-c(1) 
A[3]<-c(1) ; F[3]<-c(2) ;   E[[3]]<-numeric(0) 
A[[4]]<-list(1,3) ;F[[4]]<-numeric(0) ; E[[4]]<-numeric(0) 
A[5]<-c(4) ; F[5]<-c(4)  ; E[5]<-c(4) 
Mlist= c(A,F,E) 
M <- matrix(Mlist, length(A), 3) 
#===================================== 
> M 
    [,1] [,2]  [,3]  
[1,] 3  Numeric,0 Numeric,0 
[2,] 1  1   1   
[3,] 1  2   Numeric,0 
[4,] List,2 Numeric,0 Numeric,0 
[5,] 4  4   4   

Pytałeś (w komentarzach)”.... czy jest jakiś sposób, aby określić liczbę kolumn i wierszy, ale nie sam element, ponieważ nie są znane?"

Odpowiedział (początkowo w komentarzach)

b<-matrix(rep(list(), 6),nrow = 2, ncol =3) 
#.... then replace the NULL items with values. 
# Need to use "[[": for assignment (which your 'Update 1' did not 
# ....and your Update2 only did for some but not all of the assignments.) 

b[[1]] <- c(1,2,3,4) 
+0

dzięki za odpowiedź, długość każdego elementu jest nieznana i jest o wiele większa niż w tym przykładzie, a ja próbuję aby wypełnić to w pętli, znane jest tylko długość rzędu i kolumna, która jest oparta na innych zmiennych. –

+0

Podczas gdy to tworzy pożądaną macierz, wpisy macierzy nie są listami, ale raczej wektorami atomowymi, jak wskazał David Arenburg. – jhin

+1

@jhin: Nie widzę sposobu, aby utrzymać tę niewłaściwą pozycję po tym, jak pokazałem ci, że pierwszym elementem była lista. –