Bạn không nên thêm vào danh sách bằng c
bên trong vòng lặp, bởi vì đó có thể dẫn đến mã rất rất chậm. Về cơ bản khi bạn làm c(l, new_element)
, toàn bộ nội dung của danh sách được sao chép. Thay vào đó, bạn cần truy cập vào các phần tử của danh sách theo chỉ mục. Nếu bạn biết danh sách của mình sẽ tồn tại trong bao lâu, tốt nhất bạn nên khởi tạo nó theo kích thước này bằng cách sử dụng l <- vector("list", N)
. Nếu bạn không, bạn có thể khởi tạo nó để có độ dài bằng một số lớn (ví dụ: nếu bạn có giới hạn trên về số lần lặp) và sau đó chỉ cần chọn các phần tử không NULL sau khi vòng lặp kết thúc. Dù sao, các điểm cơ bản là bạn nên có một chỉ số để theo dõi các yếu tố danh sách và thêm sử dụng mà ví dụ
i <- 1
while(...) {
l[[i]] <- new_element
i <- i + 1
}
Để biết thêm thông đã xem Patrick Burns' The R Inferno (Chương 2).
Phát triển các đối tượng bên trong một vòng lặp (và sử dụng vòng lặp 'while') không được đề xuất kỹ thuật trong R. Điều gì xác định số lượng các phần tử? –
Có thể đáng xem bài đăng này cũng http://stackoverflow.com/questions/14455051/combine-lists-while-overriding-values-with-same-name-in-r – user20650