2011-11-12 34 views
5

Tôi không chắc chắn nếu hoán vị là từ chính xác cho điều này. Tôi muốn đưa ra một tập của n vectơ (ví dụ: [1,2], [3,4][2,3]) hoán vị tất cả chúng và nhận được một sản lượngSự kết hợp của nhiều vectơ trong R

[1,3,2],[1,3,3],[1,4,2],[1,4,3],[2,3,2] etc. 

Có một hoạt động trong R sẽ làm điều này?

+0

Tôi tin rằng bạn là mô tả sự kết hợp. Các hoán vị tương tự như các kết hợp, nhưng thứ tự của các phần tử quan trọng. – Andrie

Trả lời

9

Đây là trường hợp hữu ích để lưu trữ vectơ trong danh sách và sử dụng do.call() để sắp xếp cuộc gọi chức năng thích hợp cho bạn. expand.grid() là hàm chuẩn mà bạn muốn. Nhưng vì vậy bạn không cần phải gõ ra hoặc tên vectơ cá nhân, hãy thử:

> l <- list(a = 1:2, b = 3:4, c = 2:3) 
> do.call(expand.grid, l) 
    a b c 
1 1 3 2 
2 2 3 2 
3 1 4 2 
4 2 4 2 
5 1 3 3 
6 2 3 3 
7 1 4 3 
8 2 4 3 

Tuy nhiên, đối với tất cả sự thông minh của tôi, nó chỉ ra rằng expand.grid() chấp nhận một danh sách:

> expand.grid(l) 
    a b c 
1 1 3 2 
2 2 3 2 
3 1 4 2 
4 2 4 2 
5 1 3 3 
6 2 3 3 
7 1 4 3 
8 2 4 3 
+0

+1 Blast và damnation. Bạn đã đánh cắp câu trả lời của tôi. ;-) – Andrie

+0

@Andrie Thật đáng xấu hổ! Đang cố gắng để được * quá * thông minh không có lợi thế của nó nó sẽ xuất hiện. Tôi không xứng đáng được chấp nhận ở đây mặc dù. Tôi sẽ sửa đổi với một số upvotes. –

7

Đây là những gì expand.grid thực hiện.

Trích dẫn từ trang trợ giúp: Tạo khung dữ liệu từ tất cả các kết hợp của vectơ hoặc yếu tố được cung cấp. Kết quả là một data.frame với một hàng cho mỗi kết hợp.

expand.grid(
    c(1, 2), 
    c(3, 4), 
    c(2, 3) 
) 

    Var1 Var2 Var3 
1 1 3 2 
2 2 3 2 
3 1 4 2 
4 2 4 2 
5 1 3 3 
6 2 3 3 
7 1 4 3 
8 2 4 3 
+0

+1 Blast và damnation, bạn đánh bại tôi với nó ;-) –

+0

Xin chào, tôi đang thử phương pháp này, nhưng tôi nhận được thông báo: "Lỗi trong rep.int (rep.int (seq_len (nx), rep.int (rep.fac, nx)), orep): vectơ quá lớn "Có cách nào khác để thực hiện việc này không? – user1375871

+0

@ user1375871 Vectơ của bạn lớn bao nhiêu? –

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