2012-01-27 32 views
16

Đây là khủng khiếp cơ bản nhưng tôi dường như không thể hình dung nó raAdd tên vector vào một danh sách

Giả sử tôi có một danh sách các mục biến:

lst <- list(a=1:4, b=rep('k', 5), c=3) 

Nếu tôi muốn thêm một vector để điều này với một tên được chỉ định tôi sẽ có thể làm như vậy bằng cách:

c(f=1:5, lst) 

Nhưng thay vì tạo một mục gọi là 'f' chứa 1 2 3 4 5 nó tạo ra năm mục (f1 - f5) chứa một trong các con số.

Làm cách nào để ngăn chặn hành vi này?

Tôi biết tôi có thể sử dụng

lst$f <- 1:5 

nhưng tôi muốn thêm danh sách trong một cuộc gọi chức năng ...

Trả lời

16

Bật f vào danh sách một, và sau đó nối nó:

c(list(f=1:5), lst)

+0

Tất nhiên. Bạn làm tôi cảm thấy ngớ ngẩn nhưng tôi biết điều đó sẽ xảy ra khi tôi đặt ra câu hỏi. Cảm ơn đã giúp đỡ :-) – ThomasP85

5

giải pháp linh hoạt hơn là với append:

append(lst, list(f=1:5), after=0)# after - position to append 
10

Bạn chỉ có thể làm:

lst[[key]] <- any_object 

(lưu ý các dấu ngoặc vuông đôi [[]])

any_object có thể, tất nhiên, là một vector.

Phương pháp này có lợi thế là có thể sử dụng ngay cả khi giá trị chính xác của key được lưu trữ trong một biến và bạn không biết nó trước, hoặc nếu đó là con người biến lặp trong một vòng lặp for ví dụ:

count <- list() 
for (k in c("boys","girls","other")) { 
    count[[k]] <- sum(data == k) 
} 
12

đây là một chức năng đơn giản để nối thêm một (hoặc nhiều hơn) mục vào một danh sách:

lappend <- function (lst, ...){ 
lst <- c(lst, list(...)) 
    return(lst) 
} 

> a <- list() 
> a 
list() 

> lappend(a,c(1,2,3)) 
[[1]] 
[1] 1 2 3 

> lappend(a, c(4,5,6), c(7,8,9)) 
[[1]] 
[1] 4 5 6 

[[2]] 
[1] 7 8 9 

Hy vọng rằng sẽ giúp !! Tạm biệt.

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