如何在R中重复N次?

Mar*_*ace 45 string r repeat

在Ruby中,我可以使用以下内容重复一次String:

例如 "my_string" * 2 -> "my_stringmy_string"

在R中有这样一种同样简单的方法吗?

A5C*_*2T1 51

你可以使用replicaterep:

replicate(2, "my_string")
# [1] "my_string" "my_string"

rep("my_string", 2)
# [1] "my_string" "my_string"
Run Code Online (Sandbox Code Playgroud)

paste 会把它放在一起:

paste(replicate(2, "my_string"), collapse = "")
# [1] "my_stringmy_string"
Run Code Online (Sandbox Code Playgroud)


akr*_*run 41

有了R 3.3.0,我们可以使用strrepbase R

strrep("my_string",2)
#[1] "my_stringmy_string"
Run Code Online (Sandbox Code Playgroud)

我们也可以传递一个值向量 times

strrep("my_string",1:3)
#[1] "my_string"                   "my_stringmy_string"         
#[3] "my_stringmy_stringmy_string"
Run Code Online (Sandbox Code Playgroud)


bar*_*nus 18

使用包中的stri_dup功能stringi

stri_dup("abc",3)
[1] "abcabcabc"
Run Code Online (Sandbox Code Playgroud)

它也是矢量化的,所以你可以这样做:

> stri_dup(letters[1:3],4)
[1] "aaaa" "bbbb" "cccc"
Run Code Online (Sandbox Code Playgroud)

性能比较:)

> microbenchmark(stri_dup("abc",3),paste(replicate(3, "abc"), collapse = ""))
Unit: microseconds
                                      expr    min     lq  median     uq     max neval
                        stri_dup("abc", 3)  2.362  3.456  7.0030  7.853  64.071   100
 paste(replicate(3, "abc"), collapse = "") 57.131 61.998 65.2165 68.017 200.626   100

> microbenchmark(stri_dup("abc",300),paste(replicate(300, "abc"), collapse = ""))
    Unit: microseconds
                                            expr     min       lq   median      uq     max neval
                            stri_dup("abc", 300)   6.441   7.6995  10.2990  13.757  45.784   100
     paste(replicate(300, "abc"), collapse = "") 390.137 419.7740 440.5345 460.042 573.975   100
Run Code Online (Sandbox Code Playgroud)

  • 但是,如果你必须使用这个功能1000次它会有所作为,不是吗?:) (7认同)
  • 当我等待手指计划我要输入的下一行时,我无法检测到微秒差异,但替代方案为+1。我以前见过这个包,但还没有使用过。 (2认同)