首页 > 解决方案 > 在R中的单词列表中移动字符

问题描述

我在列表中有一组 5 个随机单词:“House”、“Book”、“Appreciate”、“Cherry”、“Computer” 我想使用一个函数将单词中的字母随机向左移动整数 x 来自 1:4,所以如果 x=2,“House”将向左移动,它将是“useHo”。如果 x=4,“欣赏”将变为“reciateAppr”。

我的代码似乎将字母向右移动,而不是向左移动。如果 x 大于单词的长度,则会产生错误,例如如果 x=3 对于单词“Of”,则它应该返回错误。

library(purrr)

wordlist <- c("House", "Book", "Appreciate", "Cherry", "Computer", "Of")

shift <- function(list, x){
  x <- sample(1:6,6)
  x <- x%%nchar(list)
  paste0(substr(list,nchar(list)-x+1,nchar(list)), substr(list,1,nchar(list)-x))
}

map(wordlist, shift)

标签: rcharacterpurrrstringrsubstr

解决方案


您可以sub在此处使用基本 R 正则表达式选项:

wordShift <- function(n, wordlist) {
    regex <- paste0("^(.{", n, "})(.*)$")
    sub(regex, "\\2\\1", wordlist)
}

wordlist <- c("House", "Book", "Appreciate", "Cherry", "Computer", "Of")
wordShift(2, wordlist)

[1] "useHo"      "okBo"       "preciateAp" "erryCh"     "mputerCo"
[6] "Of"

在移位 2 的情况下,这里使用的正则表达式是:

"^(.{2})(.*)$"

然后我们替换为\2\1,从而将前 2 个字符移动到每个单词的末尾。


推荐阅读