Как в R заменить неоднозначные символы в строке всеми параметрами неоднозначности, возвращающими вектор возможных результатов? - PullRequest
1 голос
/ 28 мая 2020

Вот проблема, которую я пытаюсь решить.

#Original String
#Where ! is a ambiguous character which represent 2:n different characters. Here i assume it stands for either "1" or "2". 
I also have multiple ambiguity characters e.g. "?" = "3" or "4".

"A!!C!!D?"

#I want to know all forms a disambiguated string could take.

I.e, in this case .!!.!!.? could produce
4*4*2 = 32 possibilities. 

#I want a function to return all possibilities as a vector.

#e.g. desired return
c("A11C11D3", "A11C12D3", "A11C21D3", "A11C22D3",
  "A12C11D3", "A12C12D3", "A12C21D3", "A12C22D3",
...
)

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

1 Ответ

2 голосов
/ 28 мая 2020

Один из способов - разбить строку, заменить неоднозначные символы их возможными значениями, сгенерировать возможные комбинации и снова вставить вместе.

mystring <- "A!!C!!D?"

lapply(strsplit(mystring, ""), function(x) {
  res <- lapply(x, function(y)
    switch(y,
      "!" = 1:2,
      "?" = 3:4,
      y)
    )
  do.call(paste0, expand.grid(res))
})

[[1]]
 [1] "A11C11D3" "A21C11D3" "A12C11D3" "A22C11D3" "A11C21D3" "A21C21D3" "A12C21D3" "A22C21D3" "A11C12D3" "A21C12D3" "A12C12D3" "A22C12D3"
[13] "A11C22D3" "A21C22D3" "A12C22D3" "A22C22D3" "A11C11D4" "A21C11D4" "A12C11D4" "A22C11D4" "A11C21D4" "A21C21D4" "A12C21D4" "A22C21D4"
[25] "A11C12D4" "A21C12D4" "A12C12D4" "A22C12D4" "A11C22D4" "A21C22D4" "A12C22D4" "A22C22D4"
...