R 将列表索引值作为数字传递,如何强制作为字符传递
R is passing list index value as numeric, how to force pass as characters
我有一些代码将包含一些字符串的列表传递给另一个函数。问题是新函数不使用与索引关联的字符串,而是使用索引号。
如何强制使用索引值后面的字符串值?
我的代码
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
,结果相同(无效)。
错误是 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)
我有一些代码将包含一些字符串的列表传递给另一个函数。问题是新函数不使用与索引关联的字符串,而是使用索引号。
如何强制使用索引值后面的字符串值?
我的代码
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
,结果相同(无效)。
错误是 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)