查找三个字符串的所有可能组合

问题描述:

假设我有几个根,前缀和后缀。查找三个字符串的所有可能组合

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 
... 

的东西,如“汽车保险报价”,我只使用后缀和任何前缀,所以我需要得到这些结果的所有可能结果也。

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.callpaste如下:

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" 
+2

+1,你可以说'do.call(paste,expand.grid(...))'产生一个字符串向量作为OP想要的。 – 2011-06-06 16:09:48

+0

谢谢,Prasad。我修改了答案来反映这一点。 – Andrie 2011-06-06 16:13:55

+0

这对我来说看起来像MadLibs。 :) – Iterator 2011-10-26 19:53:59

可以使用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简化为单个向量。