将单词拆分为长度组合
Splitting a word into length combination
我正在寻找 R 中的一个函数,该函数将给出一个整数,允许我将一个单词拆分为该长度组合,但具有滚动效果。
例如 function("Whosebug", 4)
将呈现:
c("stac", "tack", "acko", "ckov", "kove", "over", "verf", "rflo", "flow")
你们知道那个函数是否存在或者我必须创建它吗?
## install.packages("zoo")
x <- unlist(strsplit("Whosebug",""))
zoo::rollapply(x,width=4,FUN = paste0,collapse="")
# [1] "stac" "tack" "acko" "ckov" "kove" "over" "verf" "erfl" "rflo" "flow"
函数?
foo <- function(input, h) {
x <- unlist(strsplit(input,""))
zoo::rollapply(x,width=h,FUN = paste0,collapse="")
}
foo("Whosebug", 4)
# [1] "stac" "tack" "acko" "ckov" "kove" "over" "verf" "erfl" "rflo" "flow"
一个基准
考虑 substring()
:
的基础 R 方法
foo1 <- function(input, h) substring(input, seq_len(nchar(input)-h+1),h:nchar(input))
让我们生成一个很长的玩具字符串:
x <- paste0(rep("a",100000), collapse="")
system.time(foo(x,4))
# user system elapsed
# 2.280 0.004 2.288
system.time(foo1(x,4))
# user system elapsed
# 10.492 0.000 10.509
所以,看似向量化的函数 substring()
根本 没有效率,这是一个有趣的观察!
我们可以使用 base R
substring(s,seq_len(nchar(s)-4+1),4:nchar(s))
数据
s <- "Whosebug"
我正在寻找 R 中的一个函数,该函数将给出一个整数,允许我将一个单词拆分为该长度组合,但具有滚动效果。
例如 function("Whosebug", 4)
将呈现:
c("stac", "tack", "acko", "ckov", "kove", "over", "verf", "rflo", "flow")
你们知道那个函数是否存在或者我必须创建它吗?
## install.packages("zoo")
x <- unlist(strsplit("Whosebug",""))
zoo::rollapply(x,width=4,FUN = paste0,collapse="")
# [1] "stac" "tack" "acko" "ckov" "kove" "over" "verf" "erfl" "rflo" "flow"
函数?
foo <- function(input, h) {
x <- unlist(strsplit(input,""))
zoo::rollapply(x,width=h,FUN = paste0,collapse="")
}
foo("Whosebug", 4)
# [1] "stac" "tack" "acko" "ckov" "kove" "over" "verf" "erfl" "rflo" "flow"
一个基准
考虑 substring()
:
foo1 <- function(input, h) substring(input, seq_len(nchar(input)-h+1),h:nchar(input))
让我们生成一个很长的玩具字符串:
x <- paste0(rep("a",100000), collapse="")
system.time(foo(x,4))
# user system elapsed
# 2.280 0.004 2.288
system.time(foo1(x,4))
# user system elapsed
# 10.492 0.000 10.509
所以,看似向量化的函数 substring()
根本 没有效率,这是一个有趣的观察!
我们可以使用 base R
substring(s,seq_len(nchar(s)-4+1),4:nchar(s))
数据
s <- "Whosebug"