R передает значение индекса списка в виде числа, как принудительно передать в виде символов

У меня есть код, который передает список, содержащий некоторые строки, в другую функцию. Дело в том, что новая функция не использует строку, связанную с индексом, а использует номер индекса.

Как заставить его использовать строковое значение за значением индекса?

Мой код

  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)

}

Когда я пишу печать (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 ответ

Решение

Ошибка 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]] предоставляет вам содержимое первого элемента списка, который является числовым (попробуйте class(myList[[1]])).

Чтобы сохранить ваш подход, вы можете удалить свой список (только с одним элементом), используя это:

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

или индексировать непосредственно содержимое i-го элемента списка, используя фигурную скобку:

cList[i] <- GetData(as.character(cList[[i]]), StartMonth, StartNumberofMonth, StartYear, EndMonth, EndNumberofMonth, EndYear)
Другие вопросы по тегам