2015-01-11 2 views
-2

, когда я использую команду печать в моем цикле у меня есть 6140 баранов:извлекать данные из контура использование R

for (i in 1:614){ 
print(paste(urls[i], 0:10))) 
} 

, но я не знаю, как извлечь все значения в кадр данных Когда я Tru создать переменный:

for (i in 1:614){ 
a<- as.data.frame(paste(urls[i], 1:10)) 
    } 

У меня есть только 10 объектов с моими ссылками.

В общем, я хочу иметь 6140 OBJ с моими данными

P.S.sorry для моего английского :)

+0

что такое 'urls'? Символьный вектор? Кадр данных? Список? Если это кадр данных, посмотрите [этот существующий ответ] (http://stackoverflow.com/questions/11121385/repeat-rows-of-a-data-frame). – hrbrmstr

+0

urls - вектор символов –

+3

'data.frame (rep (urls, each = 10))' даст вам кадр данных с каждым элементом вектора 'urls', повторяемым 10 раз. Если вы планируете выполнять какую-либо реальную работу в R, вам будет полезно взглянуть на то, как выполнять векторизованные операции. [R tag wiki] (http://stackoverflow.com/tags/r/info) здесь, на SO, является хорошим местом, чтобы начать использовать ресурсы, чтобы лучше узнать R. – hrbrmstr

ответ

1

Я хотел бы сказать, самый простой способ сделать то, что вы хотите использовать foreach package. Он содержит аргумент .combine, который упрощает объединение результатов каждого цикла.

# Create a reproducible example of urls 
urls <- rep_len (letters, 614) 

# Install and load `foreach` 
install.packages ("foreach") 
library (foreach) 

# Create the loop and indicate that you want to join the results by row 
a <- foreach (i=1:614, .combine = rbind) %do% { 
    as.data.frame (paste(urls[i], 0:10)) 
} 

Всё. Вы можете комбинировать результаты во многих классах (векторы, кадры данных, списки и т. Д.) И пути (по строке, по столбцу и т. Д.). Изучение использования foreach не только будет полезно для этой проблемы, но и будет очень полезно, если позже вам понадобится провести параллельное вычисление.

Если вы хотите придерживаться традиционного цикла, один из многих способов сделать это:

a <- data.frame() 
for (i in 1:614){ 
    a <- rbind (a, as.data.frame (paste(urls[i], 0:10))) 
} 

Счастливый кодирования!

+1

Хорошее решение. (+1). Но векторизованное решение 'data.frame (paste (rep (urls, each = 11), 0:10))', данное @hrbrmstr, намного лучше в этом случае, IMHO. – Khashaa