r - 在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)
解决方案
您可以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 个字符移动到每个单词的末尾。
推荐阅读
- debian - 列出在 debian buster 上手动安装的 apt 包
- sublimetext3 - Sublime Text 3 未将当前目录中的文件加载到侧边栏
- kubernetes - Kubernetes 上的 Nginx 入口控制器不允许安装某些软件包
- azure-devops - 从 Azure Devops 中删除所需的审阅者
- html - 如何为滚动标题制作磨砂玻璃效果
- oracle - 带符号的列名
- c# - WPF DataGrid - 透明的水平网格线,最后一行的底部水平线除外
- php - 在php中输入直接地址时重定向页面
- python - SSL:策展人访问弹性搜索时出现 CERTIFICATE_VERIFY_FAILED 错误
- sql - 将包含数据的完整 CSV 结构复制到数据表