我有一个字符串列表,这些字符串表示全局环境中的xts对象名称。如何将字符串列表转换为名称列表,以便正确格式化以插入do.call函数?这样,函数将合并xts对象,而不只是字符串名称。
xtsNames <- list("name1", "name2", "name3")
name1 <- xts(x=1:10, order.by=Sys.Date()-1:10)
name2 <- xts(x=11:20, order.by=Sys.Date()-11:20)
name3 <- xts(x=21:30, order.by=Sys.Date()-21:30)
as.name(xtsNames) # this code fails because it does not work on a list
NewData <- do.call(rbind, xtsNames) # this code merges the strings, rather
# than the xts objects
答案 0 :(得分:3)
您可以使用rlang
包将变量名的字符串转换为实际符号:
do.call( rbind, rlang::syms(xtsNames) )
如果只需要基数R,则可以使用lapply
:
do.call( rbind, lapply(xtsNames, as.name) )
答案 1 :(得分:3)
我不确定我是否完全理解您的问题,但是您可能希望在此处使用“获取”。
do.call('rbind',lapply(xtsNames, get))
附带说明:要理解'get',请假设x <-2,然后如果在控制台上通过get('x'),则将获得2作为返回值。
?获取:
按名称搜索一个对象(获取)或零个或多个对象(mget)。
这将返回某些行,如下所示:
> do.call('rbind',lapply(xtsNames, get))
[,1]
2018-09-27 30
2018-09-28 29
2018-09-29 28
2018-09-30 27
2018-10-01 26
2018-10-02 25
2018-10-03 24