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)