2014-10-22 14 views
43

Tôi muốn thêm các yếu tố vào một danh sách trong một vòng lặp (Tôi không biết chính xác có bao nhiêu)Làm thế nào để thêm các yếu tố vào một danh sách trong R (loop)

Như thế này:

l <- list(); 
while(...) 
    l <- new_element(...); 

Cuối cùng, l[1] sẽ là phần tử đầu tiên của tôi, l[2] giây thứ hai của tôi và vân vân.

Bạn có biết cách tiếp tục khô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ử? –

+0

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

Trả lời

11

Sau đây thêm các phần tử vào danh sách trong vòng lặp.

l<-c() 
i=1 

while(i<100) { 

    b<-i 
    l<-c(l,b) 
    i=i+1 
} 
+3

Mục đích của 'b <- i là gì 'trong vòng lặp? –

+13

Đối tượng đang phát triển trong vòng lặp 'while'

+0

Điểm tốt. Tôi muốn hiển thị nhiều hơn về nơi OP sẽ đặt phần tử được thêm vào danh sách thay vì chỉ sử dụng 'i' – Jason

67

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

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