2013-01-20 42 views
5

Tôi có một danh sách dạng list(c(x1,x2),y,c(z1,z2)). Tôi muốn kết hợp các phần tử con của mỗi phần tử của danh sách để tạo ra một ma trận có dạng:Kết hợp các yếu tố danh sách trong R

[1] x1 y z1 

[2] x1 y z2 

[3] x2 y z1 

[4] x2 y z2 

Để cung cấp cho một ví dụ cụ thể, đưa ra:

A = list(c(1,4),2,3,c(1,4)) 

Tôi muốn một hàm sẽ lấy A và tạo ra một đầu ra giống hệt với lệnh mà lệnh này sẽ tạo ra:

t(matrix(c(c(1,2,3,1),1:4,c(4,2,3,1),c(4,2,3,4)),ncol=4)) 

Trả lời

11

Sử dụng expand.grid:

expand.grid(A) 
# Var1 Var2 Var3 Var4 
# 1 1 2 3 1 
# 2 4 2 3 1 
# 3 1 2 3 4 
# 4 4 2 3 4 

và nếu lệnh thực sự quan trọng, bạn có thể làm điều gì đó như:

rev(expand.grid(rev(A))) 
# Var4 Var3 Var2 Var1 
# 1 1 2 3 1 
# 2 1 2 3 4 
# 3 4 2 3 1 
# 4 4 2 3 4 

và có thể đổi tên các cột.

+0

Đó chính xác là những gì tôi đang tìm kiếm. Cảm ơn nhiều! – user1643809

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