用"" 分割两个字符串后,使用Map 循环对应的元素,创建matrix 与outer 的组合,同时将FUN 指定为paste 以连接个人元素,unlist list 输出后 paste 将字符串向量转换为单个字符串 (toString) 并创建一个 data.frame 与字符串和输出作为列
output <- unlist(Map(function(x, y) toString(sort(c(outer(x,
if(length(y) == 0) "" else y, FUN = paste0)))),
strsplit(string1, ""), strsplit(string2, "")))
data.frame(string1, string2, output)
# string1 string2 output
#1 AB E AE, BE
#2 CD GH CG, CH, DG, DH
#3 EF E, F
注意:if 确保如果字符串中只有空白 ("") 元素,它不会返回 character(0)
如果超过2个字符串,使用expand.grid
library(dplyr)
library(purrr)
output <- mget(ls(pattern = "^string\\d+$")) %>%
transpose %>%
map_chr(~ {
x1 <- strsplit(unlist(.), "")
x1[lengths(x1) == 0] <- ''
expand.grid(x1) %>%
invoke(paste0, .) %>%
toString
} )
mget(ls(pattern = "^string\\d+$")) %>%
as_tibble %>%
mutate(output = output)
-输出
# A tibble: 3 x 4
# string1 string2 string3 output
# <chr> <chr> <chr> <chr>
#1 AB "E" FH AEF, BEF, AEH, BEH
#2 CD "GH" NG CGN, DGN, CHN, DHN, CGG, DGG, CHG, DHG
#3 EF "" C EC, FC
数据
string1 <- c("AB", "CD", "EF")
string2 <- c("E", "GH", "")
string3 <- c("FH", "NG", "C")