在R中连接字符串列表的正确方法

egn*_*nha 0 string r

在R中执行以下字符串连接的惯用方法是什么?

给出两个字符串向量,如下所示,

titles <- c("A", "B")
sub.titles <- c("x", "y", "z")
Run Code Online (Sandbox Code Playgroud)

我想生成矢量

full.titles <- c("A_x", "A_y", "A_z", "B_x", "B_y", "B_z")
Run Code Online (Sandbox Code Playgroud)

显然,这可以通过两个for循环来完成.但是,我想知道R中的"惯用"(即优雅和自然)解决方案是什么.

在Python中,惯用解决方案可能如下所示:

titles = ['A', 'B']
subtitles = ['x', 'y', 'z']
full_titles = ['_'.join([title, subtitle])
               for title in titles for subtitle in subtitles]
Run Code Online (Sandbox Code Playgroud)

R是否允许相似程度的表达?

备注

到目前为止提出的解决方案之间的共识是,在R中这样做的惯用方法基本上是

full.titles <- c(t(outer(titles, sub.titles, paste, sep = "_")))
Run Code Online (Sandbox Code Playgroud)

有趣的是,这在Python中有一个(几乎)字面翻译:

full_titles = map('_'.join, product(titles, subtitles))
Run Code Online (Sandbox Code Playgroud)

productitertools模块中的笛卡尔积函数在哪里.然而,在Python,这样的使用map被认为是更令人费解的-即,小于表达-比等效使用列表解析的,如上所述.

Mif*_*iff 5

有两种方法可以解决这个问题,或者使用'outer()'函数将函数定义为两个向量的矩阵乘积,其方式如下:

outer(titles, sub.titles, paste, sep='_')

然后使用,将矩阵从矩阵中转换为矢量,或将输入转换为数据帧 expand.grid()

do.call(paste, expand.grid(titles, sub.titles, sep='_', stringsAsFactors=FALSE))