Нахождение всех возможных комбинаций из трех строк - PullRequest
3 голосов
/ 06 июня 2011

Допустим, у меня есть пара корней, префиксов и суффиксов.

roots <- c("car insurance", "auto insurance")
prefix <- c("cheap", "budget")
suffix <- c("quote", "quotes")

Есть ли простая функция или пакет в R, которые позволят мне построить все возможные комбинации трех векторов символов.

Итак, я хочу список, фрейм данных или вектор, который возвращает следующий список всех возможных комбинаций каждой строки.

cheap car insurance
budget car insurance
cheap car insurance quotes
cheap auto insurance quotes
auto insurance quote
auto insurance quotes
...

С чем-то вроде "автострахования" я использую только суффикс, а не префикс, поэтому мне нужно получить все возможные результаты этих результатов.

Ответы [ 2 ]

23 голосов
/ 06 июня 2011

expand.grid ваш друг:

expand.grid(prefix, roots, suffix)

    Var1           Var2   Var3
1  cheap  car insurance  quote
2 budget  car insurance  quote
3  cheap auto insurance  quote
4 budget auto insurance  quote
5  cheap  car insurance quotes
6 budget  car insurance quotes
7  cheap auto insurance quotes
8 budget auto insurance quotes

Отредактировано, чтобы включать полезные комментарии Прасада:

Однако вы заметите, что ваши результаты являются факторами ине персонажи.Чтобы преобразовать эти факторы в символьные векторы, вы можете использовать do.call и paste следующим образом:

do.call(paste, expand.grid(prefix, roots, suffix))

[1] "cheap car insurance quote"    "budget car insurance quote"  
[3] "cheap auto insurance quote"   "budget auto insurance quote" 
[5] "cheap car insurance quotes"   "budget car insurance quotes" 
[7] "cheap auto insurance quotes"  "budget auto insurance quotes"
5 голосов
/ 06 июня 2011

Вы можете использовать функцию paste в качестве аргумента для outer:

outer(prefix,outer(roots,suffix,paste),paste)

Вывод:

, , 1

     [,1]                         [,2]                         
[1,] "cheap car insurance quote"  "cheap auto insurance quote" 
[2,] "budget car insurance quote" "budget auto insurance quote"

, , 2

     [,1]                          [,2]                          
[1,] "cheap car insurance quotes"  "cheap auto insurance quotes" 
[2,] "budget car insurance quotes" "budget auto insurance quotes"

Это можно уменьшить до одного вектора с помощью as.vector.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...