R将列表索引值作为数字传递,如何强制传递为字符

时间:2015-06-01 21:59:52

标签: r casting character r-factor

我有一些代码将包含一些字符串的列表传递给另一个函数。事情是新函数不使用与索引关联的字符串,而是使用索引号。

如何强制它使用索引值后面的字符串值?

我的代码

  for (i in 1:length(cList)) {

    cList[i] <- GetData(cList[i], StartMonth, StartNumberofMonth, StartYear, EndMonth, EndNumberofMonth, EndYear)

      }


GetData <- function (TickerID, StartMonth, StartNumberofMonth, StartYear, EndMonth, EndNumberofMonth, EndYear) {

  url1 <- "http://real-chart.finance.yahoo.com/table.csv?s="
  url2 <- paste0(TickerID, "&a=", StartMonth-1, "&b=")
  url3 <- paste0(StartNumberofMonth, "&c=", StartYear)
  url4 <- paste0("&d=", EndMonth -1, "&e=", EndNumberofMonth)
  url5 <- paste0("&f=", EndYear, "&g=d&ignore=.csv")
  #/ Generate CSV URL link
      url.final <- paste(url1, url2, url3, url4, url5)

}

当我写print(url.final)时,我得到了

[1] "http://real-chart.finance.yahoo.com/table.csv?s= 4&a=1&b= 1&c=2013 &d=1&e=1 &f=2015&g=d&ignore=.csv"

TickerID列表

[1] BABA
Levels: ABBV ABEV ACT BABA KMI LFC MA ORCL TSM UPS

如您所见,已使用索引值,而不是其后面的字符串。我已经尝试使用TickerID投射as.character,结果相同(不工作)。

1 个答案:

答案 0 :(得分:1)

错误是cList是一个列表,因此您无法直接将cList[i]所使用的组件转换为字符,因为这也是一个列表!

如果您有myList = list(a=1, b=2, c=3)myList[1]myList[1:2]是列表(请尝试class(myList[1])class(myList[1:2])进行检查)。另一方面,myList[[1]]为您提供列表中第一个元素的内容,即数字(try class(myList[[1]]))。

为了保持您的方法,您可以使用以下方法取消列表(只有一个元素):

cList[i] <- GetData(as.character(unlist(cList[i])), StartMonth, StartNumberofMonth, StartYear, EndMonth, EndNumberofMonth, EndYear)

或使用doble括号直接索引列表的第i个元素的内容:

cList[i] <- GetData(as.character(cList[[i]]), StartMonth, StartNumberofMonth, StartYear, EndMonth, EndNumberofMonth, EndYear)