2017-04-20 84 views
0

我有一些'xts'对象,将近600个,我想将它们合并为一个'xts'对象。合并很多xts对象

这些对象的名称类似于mfi0,mfi1,mfi2,...。 我可以写几个对象,如

a<-merge(mfi0,mfi1,mfi2) 

合并命令,但我的问题是,我不能写600个对象looplapply,包含字符串“MFI”和一个数字,我想paste但不能写。

+1

' obj < - paste0(“mfi”,1:600); obj_list < - lapply(obj,get); do.call(merge,obj_list)' –

+0

或者,'code < - paste0(“merge(”,paste0(“mfi”,1:600,collapse =“,”),“)”); eval(parse(text = code))' –

+0

它确实有效。非常感谢你。 – linmu

回答

2

这些物体从哪里来?最好在生成过程中使用一个列表而不是600个独立的变量。因此,代替mfi0mfi1,...,mfi600,您应该有mfi[1],mfi[2],...,mfi[600]

让您的所有数据帮助处理它。合并过程现在简单得多使用自己的合并命令:

merged_mfi <- do.call(merge, mfi) 

或使用合并命令只处理两个对象(即将R合并为data.frames):

merged_mfi <- Reduce(merge, mfi[2:length(mfi)], mfi[1]) 
+0

我想计算636个代理商的货币流通指数(MFI),我用pdfetch软件包'sp < - pdfetch_YAHOO(标识符[1:636],c(“high”,“low”,“close”,“从“as.Date”(“2012-01-01”)到= as.Date(“2016-12-30”)'',然后我使用TTR包中的MFI,我写了两个函数'HLC < (i){sp [,(4+ i + 4)}} (i,0,636) (nam,MFI(HLC(i),Volume(i) ),14)) } ' – linmu

+0

您可以在初始化mfi < - list之后使用mfi [i] < - MFI(...)来代替'assign(nam,MFI(...))' ()' – Pieter

+0

几乎在任何情况下,在执行哟时生成变量名是个坏习惯你的代码。在这种情况下使用列表,数组,矩阵,数据框架,集合,字典或任何类似的数据结构。 – Pieter