2012-09-17 47 views
35

Nó không hiệu quả trong R để mở rộng cấu trúc dữ liệu trong một vòng lặp. Làm cách nào để preallocate một list của một kích thước nhất định? matrix giúp việc này dễ dàng thông qua các đối số ncolnrow. Làm thế nào để làm điều này trong danh sách? Ví dụ:danh sách preallocate trong R

x <- list() 
for (i in 1:10) { 
    x[[i]] <- i 
} 

Tôi cho rằng điều này không hiệu quả. Một cách tốt hơn để làm điều này là gì?

Trả lời

49

vector có thể tạo vectơ trống của chế độ và độ dài mong muốn.

x <- vector(mode = "list", length = 10) 
4

Something như thế này:

x <- vector('list', 10) 

Nhưng sử dụng lapply là sự lựa chọn tốt nhất

19

Để mở rộng về những gì @Jilber nói, lapply được đặc biệt xây dựng cho loại hình này hoạt động.

thay cho vòng lặp for, bạn có thể sử dụng:

x <- lapply(1:10, function(i) i) 

Bạn có thể mở rộng này để ví dụ phức tạp hơn. Thông thường, những gì trong phần thân của vòng lặp for có thể được dịch trực tiếp thành một hàm chấp nhận một hàng đơn lẻ giống như một hàng từ mỗi lần lặp của vòng lặp.

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