查找三个字符串的所有可能组合
问题描述:
假设我有几个根,前缀和后缀。查找三个字符串的所有可能组合
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.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"
答
可以使用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
简化为单个向量。
+1,你可以说'do.call(paste,expand.grid(...))'产生一个字符串向量作为OP想要的。 – 2011-06-06 16:09:48
谢谢,Prasad。我修改了答案来反映这一点。 – Andrie 2011-06-06 16:13:55
这对我来说看起来像MadLibs。 :) – Iterator 2011-10-26 19:53:59