2013-10-12 12 views
6

Tôi muốn khai báo một danh sách có chứa ma trận M 3 bởi 3. Nếu tôi biết số M trước, sau đó tôi có thể tuyên bố danh sách này bằng cách:R: cách khai báo đối tượng danh sách với các phần tử M

elm <- matrix(NA,3,3) 
## Say M = 7 
myList <- list(elm,elm,elm,elm,elm,elm,elm) 

Phương pháp này trở nên cồng kềnh nếu M là lớn. Điều tệ hơn phương pháp này không hoạt động nếu tôi không biết giá trị của M trước. Nếu tôi muốn khai báo một vector có chiều dài M, tôi có thể làm điều đó bằng cách gọi điện thoại :

myVec <- rep(NA,M) 

ngay cả khi tôi không biết giá trị của M trước. Có cách tương tự để khai báo một danh sách các kích cỡ M?

Cảm ơn bạn

Trả lời

5

Hãy thử

mylist <- rep(list(elm),7) 

đó, đối với S = 3, mang đến cho

[[1]] 
    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 

[[2]] 
    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 

[[3]] 
    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 

Bằng cách này, identical(matrix(NA,3,3),matrix(,3,3)) là đúng, vì ma trận được khởi tạo thành NA theo mặc định. Xem ?matrix.

+1

Nếu ma trận của bạn không giống nhau, câu trả lời của alexis_laz sẽ hữu ích hơn: (1) khởi tạo danh sách độ dài chính xác và sau đó (2) gán cho nó bằng 'mylist [[i]]'. – Frank

+1

Cảm ơn bạn! Đây là những gì tôi muốn! – ThePrincess

12

Có lẽ đây:

myls <- vector("list", length = S)

+0

Điều này là tốt để khai báo danh sách kích thước S. Nhưng tôi muốn khai báo danh sách chứa ma trận S 3 x 3 sao cho sau, trong mã của tôi, tôi có thể gọi một phần tử (j, k) của i^th 3 bởi 3 ma trận của danh sách bởi: myls [[i]] [j, k] – ThePrincess

+0

Thử 'for (i in 1: length (myls)) {myls [[i]] <- elm}; myls' –

Các vấn đề liên quan