2015-07-06 3 views
3

Я paste0'ing кучу переменных в окончательный список URL-адресовpaste0 несколько списков разной длины без зацикливания

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

urls <- paste0(base, "id=", id, "search=", animal) 

Выход выглядит следующим образом:

[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" 

Но я на самом деле хочу 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" ... 

ответ

4

Вы можете изменить код, включив в reppaste0 или sprintf

sprintf('%sid=%dsearch=%s', base, id, rep(animal,each=length(id))) 

Или

paste0(base, 'id=',id, 'search=', rep(animal,each=length(id))) 

Или, как предложил @MrFlick, мы можем использовать expand.grid, чтобы получить все комбинации между 'животное' и 'ид'

with(expand.grid(a=animal, i=id), paste0(base, "id=", i, "search=", a)) 
+2

Это хорошая утилизация отходов. Вы также можете быть более явным с помощью 'exapand.grid':' with (expand.grid (a = animal, i = id), paste0 (base, "id =", i, "search =", a)) ' – MrFlick

+0

@MrFlick Спасибо, это имеет смысл. – akrun