2011-10-26 42 views
9

Nền: Tôi có một hàm có một số tham số. Tôi muốn có kết quả của hàm cho tất cả các kết hợp tham số có thể có.Trong R, làm cách nào để có được tất cả các kết hợp có thể có của các giá trị của một số vectơ?

Một ví dụ đơn giản:

f <- function(x, y) { return paste(x, y, sep=",")} 
colors = c("red", "green", "blue") 
days = c("Monday", "Tuesday") 

Tôi muốn kết quả của tôi trông giống như

 color day   f  
[1,] "red" "Monday" "red,Monday" 
[2,] "red" "Tuesday" "red,Tuesday" 
[3,] "green" "Monday" "green,Monday" 
[4,] "green" "Tuesday" "green,Tuesday" 
[5,] "blue" "Monday" "blue,Monday" 
[6,] "blue" "Tuesday" "blue,Tuesday" 

Ý tưởng của tôi là tạo ra một ma trận với các cột colorday, điền vào nó bằng cách sử dụng vectơ hiện colorsdays, khởi tạo cột trống cho kết quả, sau đó sử dụng vòng lặp để gọi f một lần cho mỗi hàng ma trận và ghi kết quả vào cột cuối cùng. Nhưng tôi không biết làm thế nào để dễ dàng tạo ra ma trận từ các vector colorsdays. Tôi đã thử tìm kiếm nó, nhưng tất cả các kết quả tôi nhận được cho các chức năng combn, mà làm một cái gì đó khác nhau.

Trong trường hợp đơn giản này, colorsdays là các yếu tố, nhưng trong ví dụ thực tế của tôi, đây không phải là trường hợp. Một số tham số cho hàm là số nguyên, do đó, vectơ thực của tôi có thể trông giống như 1, 2, 3 và hàm sẽ yêu cầu nó được truyền cho nó dưới dạng số. Vì vậy, xin vui lòng không có giải pháp mà dựa trên mức độ yếu tố, nếu họ không thể nào đó được sử dụng để làm việc với các số nguyên.

+0

liên quan: http://stackoverflow.com/questions/3993546/cách tạo ra một ma trận kết hợp –

+0

có thể trùng lặp của [Tìm tất cả các kết hợp có thể có của ba chuỗi] (http://stackoverflow.com/questions/6254533/finding-all-possible-combinations -of-a-ba-strings) –

Trả lời

22

Tôi nghĩ rằng bạn chỉ muốn expand.grid:

> colors = c("red", "green", "blue") 
> days = c("Monday", "Tuesday") 
> expand.grid(colors,days) 
    Var1 Var2 
1 red Monday 
2 green Monday 
3 blue Monday 
4 red Tuesday 
5 green Tuesday 
6 blue Tuesday 

Và, nếu bạn muốn xác định tên cột trong cùng một dòng:

> expand.grid(color = colors, day = days) 
    color  day 
1 red Monday 
2 green Monday 
3 blue Monday 
4 red Tuesday 
5 green Tuesday 
6 blue Tuesday 
+5

Và, nếu bạn muốn chỉ định fy các tên cột trong cùng một dòng, 'expand.grid (color = colors, day = days)' –

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