Перебирая список кусками
У меня есть список из нескольких тысяч биржевых символов для прохождения через функцию. Однако функция принимает только 200 или менее символов одновременно. Как настроить циклы для прохождения через куски 200 символов, пока список не будет завершен. Ниже приведена некая свободная структура, я думаю, это может выглядеть. Функция работает, когда я прохожу через сокращенную вручную шортсимб, но мне нужно автоматизировать этот процесс, чтобы он мог повторяться.
library(quantmod)
symbols<-read.csv("companylist.csv")
for(i in 1:end){
for(i in 1:200)
metrics <- getQuote(paste(symbols sep="", collapse=";"), what=what_metrics)
}}
shortsymb<-symbols[1:199,]
1 ответ
Решение
Вот возможное быстрое и грязное решение:
nSym <- nrow(symbols)
chunkSize <- 200
for(i in 1:ceiling(nSym / chunkSize)){
shortsymb<-symbols[((i-1)*chunkSize+1):min(nSym,(i*chunkSize)),] }
# do what you need with shortsymb
}
Описание кода:
- рассчитать количество кусков, просто разделив:
nSym / chunkSize
(мы берем потолок, так как может быть остаток, еслиnSym
не кратноchunkSize
) - за каждый кусок
(1,2,...,n)
мы вычисляем соответствующие индексы начала и конца строки, какstart = ((i-1)*chunkSize+1)
а такжеend = min(nSym,(i*chunkSize))
(min
функция необходима, потому что последний кусок может быть меньше, чемchunkSize
) - мы используем индексы для подмножества оригинала
data.frame