对于R中的Loop,请从URL导入多个CSV

时间:2018-07-05 20:31:20

标签: r loops import lapply stockquotes

我正在导入具有以下类似格式的500个csv:

https://www.quandl.com/api/v3/datasets/WIKI/stockname/data.csv?column_index=11&transform=rdiff&api_key=keyname

其中股票名称是单只股票的股票代码。我将股票报价器的列表保存在名为stocklist的数据框中。

我想用lapply遍历我的股票清单。这是我到目前为止的内容:

lst <- lapply(stocklist, function(i){
  url <- paste0("https://www.quandl.com/api/v3/datasets/WIKI/",i,"/data.csv?column_index=11&transform=rdiff&api_key=XXXXXXXXXXXXXXX")
  spdata <- read.csv(url, stringsAsFactors = FALSE)

})

我收到以下错误:

Error in file(file, "rt") : invalid 'description' argument

什么可能导致此错误?我也尝试过使用for循环,但未成功,并被告知lapply是R中针对此类任务的更好方法。

编辑:

库存清单结构:

> dput(droplevels(head(stocklist)))
structure(list(`Ticker symbol` = c("MMM", "ABT", "ABBV", "ABMD", 
"ACN", "ATVI")), .Names = "Ticker symbol", row.names = c(NA, 
6L), class = "data.frame")

第二次修改(解决方案):

stockdata<-lapply(paste0("https://www.quandl.com/api/v3/datasets/WIKI/",stocklist[1][[1]],"/data.csv?column_index=11&transform=rdiff&api_key=XXXXXXX"),read.csv,stringsAsFactors=FALSE)

为股票数据添加名称

names(stockdata)<-stocklist[1][[1]]

2 个答案:

答案 0 :(得分:1)

我相信您的“ i”变量是一个向量。

请确保您正确地对它进行下标,并且一次只传递一只股票。

此:i看起来像这样:i[x]

答案 1 :(得分:0)

我不知道我是什么,但是我猜这是一个数字。您可以尝试一下,看看是否适合您吗?我认为这非常接近。只要确保该URL与您从中获取数据的实际URL的模式匹配即可。我试图找到它;我找不到。

seq <- c(1:10)

for (value in seq) {

mydownload <- function (start_date, end_date) {
  start_date <- as.Date(start_date)  ## convert to Date object
  end_date <- as.Date(end_date)  ## convert to Date object
  dates <- as.Date("1970/01/01") + (start_date : end_date)  ## date sequence
  ## a loop to download data
  for (i in 1:length(dates)) {
    string_date <- as.character(dates[i])
    myfile <- paste0("C:/Users/Excel/Desktop/", string_date, ".csv")
    string_date <- gsub("-", "-", string_date)  ## replace "-" with "/"
    myurl <- paste("https://www.quandl.com/api/v3/datasets/WIKI/", i, "/data.csv?column_index=11&transform=rdiff&api_key=xxxxxxxxxx", sep = "")
    download.file(url = myurl, destfile = myfile, quiet = TRUE)
    }
  }

}