分块循环遍历列表
Looping through a list in chunks
我有一个要通过函数传递的数千个股票代码的列表。但是,该函数一次只接受 200 个或更少的符号。我如何设置循环以通过 200 个符号的块,直到列表完成。下面是一些我认为可能看起来像的松散结构。当我通过手动缩短的 shortsymb 时该函数有效,但我需要自动执行此过程以便它可以迭代。
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,]
这是一个可能的快速解决方案:
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
进行子集化
我有一个要通过函数传递的数千个股票代码的列表。但是,该函数一次只接受 200 个或更少的符号。我如何设置循环以通过 200 个符号的块,直到列表完成。下面是一些我认为可能看起来像的松散结构。当我通过手动缩短的 shortsymb 时该函数有效,但我需要自动执行此过程以便它可以迭代。
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,]
这是一个可能的快速解决方案:
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
进行子集化