【问题标题】:I want to create a set of data arrays within a loop and name it according to a variable list我想在循环中创建一组数据数组并根据变量列表命名
【发布时间】:2014-04-18 15:34:37
【问题描述】:

我想通过 API 函数为国家列表导入几个时间序列变量。我想将每个国家/地区的数据存储在单独的数组中。数据数组的名称应该是 3 个字母的国家代码。对于一个国家/地区,我的代码如下所示:

data = Quandl(c(var1,var2,var3), collapse="annual")

我想遍历一个国家列表,其中还包含从 Quandl.com 下载 var1-3 的标识符。我的问题是我无法找到一种方法来使用各自的国家代码(例如美国)重命名每个国家的数据数组(数据)。最后,我想在工作区(POL、DEU、USA、CHN ...)的列表中为每个国家/地区创建一个单独的数据数组。

基本上,我正在寻找一种实用的方法来做到这一点:

list[i,1] = data

很遗憾,这不起作用,但为什么没有一种简单的方法可以在循环中重命名数据数组?

【问题讨论】:

    标签: arrays r loops time-series


    【解决方案1】:

    您可以使用lapply 创建数据列表,然后用国家代码重命名列表中的每个元素。

    countries<-c("a","b","c")
    dat<-lapply(countries,function(x) rnorm(4))
    names(dat)<-countries
    > dat[["a"]]
    [1] -0.5157099 -1.0372721  0.9696698 -0.9280852
    

    您不会有一个名为 POL 或 USA 的变量,但您会有一个列表,您可以从中提取相关的数据框。我认为这可能是比为每个国家/地区创建变量更清洁的解决方案。

    您可以通过查看其中一个应用函数(applymapplysapplylapply 等)来取消循环。考虑以下: 外部 lapply 执行整个较高国家级“循环”的功能,而内部 mapply 为单个国家/地区的各种参数执行一组给定的操作

    countries<-c("a","b","c")
    arg1<-1:3
    arg2<-10*1:3
    dat<-mapply(data.frame(c1=x,c2=rnorm(1)*vars),vars,x,SIMPLIFY=F))
    names(dat)<-countries
    
    
    dat<-lapply(countries, function(x)
              do.call(rbind,
                      mapply(function(x,y,z) data.frame(country=x,c1=rnorm(2)*y,c2=rnorm(2)*z),
                            x=x,y=arg1,z=arg2,SIMPLIFY=F)))
    

    如果您仍想坚持使用 for 循环,请创建一个列表并添加到其中并按上述方式重命名

    result<-list()
     for(i in 1:50)   result[[i]]<-YOURFUNCTIONHERE
    names(result)<-countryNames
    

    【讨论】:

    • 谢谢,但我不确定这将如何与我的 for 循环结构联系起来。也许我应该更清楚地解释一下,每个 var1-3 都有不同的 ID 代码,并且差异超出了国家标识符。还有其他建议吗?
    • 我明白了。我将编辑我的回复。我要说的是,您实际上并不需要 for 循环。在大多数情况下,您应该尽量避免在支持向量运算的语言中出现 for 循环。
    • 我知道这样会更优雅,但我真的不确定这是否适用于我需要调用的 API 函数。我在这里重写了我的问题:stackoverflow.com/questions/22388404/…
    • 我希望我的附加帖子有助于澄清问题。
    • 非常感谢您的帮助。我坚持使用循环。感谢您向我介绍列表的功能。
    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    相关资源
    最近更新 更多