Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 循环/重复字符串,直到达到给定长度,然后计数特定字母_R - Fatal编程技术网

R 循环/重复字符串,直到达到给定长度,然后计数特定字母

R 循环/重复字符串,直到达到给定长度,然后计数特定字母,r,R,我的问题如下: 假设我有一个字符串abc和一个数字10。我想将字符串扩展为abcabca(在末尾添加a) 基本上,我试图做的是将给定字符串s中的字符扩展一个给定的数字n,并计算某个字母出现的次数 我正在寻找一种更好的方法来实现上述目标。我有一个可以工作的函数,但它给出了由cbind()引起的警告 代码/数据: repeatedString <- function(n, s, l){ split_strings = strsplit(s, '')[[1]] make_sequence

我的问题如下:

假设我有一个字符串
abc
和一个数字
10
。我想将字符串扩展为
abcabca
(在末尾添加
a

基本上,我试图做的是将给定字符串
s
中的字符扩展一个给定的数字
n
,并计算某个字母出现的次数

我正在寻找一种更好的方法来实现上述目标。我有一个可以工作的函数,但它给出了由
cbind()
引起的警告

代码/数据:

repeatedString <- function(n, s, l){
  split_strings = strsplit(s, '')[[1]]
  make_sequences = seq(from = 1, to = n)
  extend_characters = cbind(split_strings, make_sequences)
  s_seq = extend_characters[,1]
  occurrences = sum(s_seq == l)
  return(occurrences)
}

repeatedString(n = 10, s = "abc", l = "c")

repeatedString拆分字符串,然后使用
length.out
参数
rep
函数通过循环其元素将字符串扩展到length
n

x = "abc"
n = 10
sapply(strsplit(x, ""), function(s){
    paste(rep(s, length.out = n), collapse = "")
})
#[1] "abcabcabca"

生成字符串的另一种可能性是:

n <- 10
x <- c("abc", "abcde", "ab")

substr(strrep(x, (floor(n/nchar(x)) + 1)), 1, n)

[1] "abcabcabca" "abcdeabcde" "ababababab"
性能方面的一个小比较(只是字符串的生成):


x谢谢!我稍微改变了你的解决方案,因为我想一步一步地看问题<代码>重复字符串
x_n <- substr(strrep(x, (floor(n/nchar(x)) + 1)), 1, n)

sapply(x_n, function(x) length(grepRaw("a", x, all = TRUE, fixed = TRUE)))

abcabcabca abcdeabcde ababababab 
         4          2          5 
x <- rep(x, 1000000)

library(microbenchmark)

microbenchmark(
 tmfmnk = substr(strrep(x, (floor(n/nchar(x)) + 1)), 1, n),
 d.b = sapply(strsplit(x, ""), 
                           function(s) paste(rep(s, length.out = n), collapse = "")),
 times = 5)

Unit: seconds
   expr       min        lq     mean    median        uq       max neval
 tmfmnk  1.540213  1.568921  1.60646  1.569343  1.669179  1.684643     5
    d.b 15.722021 16.437724 17.05823 17.022109 17.205378 18.903920     5