Итак, что я хочу - это информационный кадр, в котором комбинации двух случайных векторов представлены в строке.Я не хочу дублировать комбинации, как;1,2; 2,1.Всего 1 из них.Как и комбинация, НЕ являющаяся самоповторяющейся;1,1.
Прямо сейчас у меня есть этот простой цикл for, но он не идеален;
unique_combos <- function(v1, v2) {
df <- data.frame(matrix(ncol=2))
counter = 0
for (name1 in v1) {
for (name2 in v2) {
if (name1 != name2){
counter = counter + 1
df[counter,] <- c(name1, name2)
}
}
}
return(df)
}
# example usage;
> v1 <- c(1,2,3,4)
> v2 <- c(3,4,5,6)
> unique_combos(v1, v2)
X1 X2
1 1 3
2 1 4
3 1 5
4 1 6
5 2 3
6 2 4
7 2 5
8 2 6
9 3 4
10 3 5
11 3 6
12 4 3
13 4 5
14 4 6
>
Любой векторизованный способ сделать это?Желательно также нацелены на производительность.Помимо этого я хотел отметить, что векторы могут быть любой длины и содержать случайные величины.
Edit1 - моя функция не работает должным образом! ;Мне не нужна комбинация 3-4 4-3.
Edit2 - мое окончательное решение от @Ryan и @Frank (спасибо, ребята!);
unique_combos <- function(v1, v2) {
intermediate <- unique(CJ(v1, v2)[V1 > V2, c("V1", "V2") := .(V2, V1)])
return(intermediate[V1 != V2])
* note;для этого используются пакеты data.table
и plyr
.