Перебирая список кусками

У меня есть список из нескольких тысяч биржевых символов для прохождения через функцию. Однако функция принимает только 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
Другие вопросы по тегам