paste0多个不同长度的列表,没有循环

eme*_*hex 4 r

我将一堆变量粘贴到一个确定的url列表中

id <- 1:10
animal <- c("dog", "cat", "fish")
base <- "www.google.com/"

urls <- paste0(base, "id=", id, "search=", animal)
Run Code Online (Sandbox Code Playgroud)

输出如下:

 [1] "www.google.com/id=1search=dog"  "www.google.com/id=2search=cat"  "www.google.com/id=3search=fish"
 [4] "www.google.com/id=4search=dog"  "www.google.com/id=5search=cat"  "www.google.com/id=6search=fish"
 [7] "www.google.com/id=7search=dog"  "www.google.com/id=8search=cat"  "www.google.com/id=9search=fish"
[10] "www.google.com/id=10search=dog"
Run Code Online (Sandbox Code Playgroud)

但我实际上希望ids并按animals顺序重复:

 [1] "www.google.com/id=1search=dog"  "www.google.com/id=2search=dog"  "www.google.com/id=3search=dog"
 [4] "www.google.com/id=4search=dog"  "www.google.com/id=5search=dog"  "www.google.com/id=6search=dog"
 [7] "www.google.com/id=7search=dog"  "www.google.com/id=8search=dog"  "www.google.com/id=9search=dog"
[10] "www.google.com/id=10search=dog" "www.google.com/id=1search=cat"   ...
Run Code Online (Sandbox Code Playgroud)

akr*_*run 6

您可以通过修改代码reppaste0sprintf

 sprintf('%sid=%dsearch=%s', base, id, rep(animal,each=length(id)))
Run Code Online (Sandbox Code Playgroud)

要么

 paste0(base, 'id=',id, 'search=', rep(animal,each=length(id)))
Run Code Online (Sandbox Code Playgroud)

或者@MrFlick建议,我们可以expand.grid用来获取'animal'和'id'之间的所有组合

  with(expand.grid(a=animal, i=id), paste0(base, "id=", i, "search=", a))
Run Code Online (Sandbox Code Playgroud)

  • 这很好地利用了矢量回收.您还可以更明确地使用`exapand.grid`:`with(expand.grid(a = animal,i = id),paste0(base,"id =",i,"search =",a))` (2认同)