1

我已经尝试了这个网站上列出的很多东西,但据我所知,还没有任何东西能回答这个问题。

我有一个在我的工作区中指定对象名称的字符列表。这些对象中的每一个都代表我想cbind放入新数据框中的单独列。

我可以很容易地手动完成。但是,我无法将字符列表转换为作为新数据框中的列绑定在一起的对象列表。这是列表的结构:

list("ID", "ID1", "ID2", "ID3", "Year", "Month", "Element", "Value1", 
    "MFlag1", "QFlag1", "SFlag1", "Value2", "MFlag2", "QFlag2", 
    "SFlag2", "Value3", "MFlag3", "QFlag3", "SFlag3", "Value4", 
    "MFlag4", "QFlag4", "SFlag4", "Value5", "MFlag5", "QFlag5", 
    "SFlag5", "Value6", "MFlag6", "QFlag6", "SFlag6", "Value7", 
    "MFlag7", "QFlag7", "SFlag7", "Value8", "MFlag8", "QFlag8", 
    "SFlag8", "Value9", "MFlag9", "QFlag9", "SFlag9", "Value10", 
    "MFlag10", "QFlag10", "SFlag10", "Value11", "MFlag11", "QFlag11", 
    "SFlag11", "Value12", "MFlag12", "QFlag12", "SFlag12", "Value13", 
    "MFlag13", "QFlag13", "SFlag13", "Value14", "MFlag14", "QFlag14", 
    "SFlag14", "Value15", "MFlag15", "QFlag15", "SFlag15", "Value16", 
    "MFlag16", "QFlag16", "SFlag16", "Value17", "MFlag17", "QFlag17", 
    "SFlag17", "Value18", "MFlag18", "QFlag18", "SFlag18", "Value19", 
    "MFlag19", "QFlag19", "SFlag19", "Value20", "MFlag20", "QFlag20", 
    "SFlag20", "Value21", "MFlag21", "QFlag21", "SFlag21", "Value22", 
    "MFlag22", "QFlag22", "SFlag22", "Value23", "MFlag23", "QFlag23", 
    "SFlag23", "Value24", "MFlag24", "QFlag24", "SFlag24", "Value25", 
    "MFlag25", "QFlag25", "SFlag25", "Value26", "MFlag26", "QFlag26", 
    "SFlag26", "Value27", "MFlag27", "QFlag27", "SFlag27", "Value28", 
    "MFlag28", "QFlag28", "SFlag28", "Value29", "MFlag29", "QFlag29", 
    "SFlag29", "Value30", "MFlag30", "QFlag30", "SFlag30", "Value31", 
    "MFlag31", "QFlag31", "SFlag31")

同样,这些都是现有的工作区对象,我试图将其称为新数据框中的列。

编辑

这是我用来创建每个向量的代码:

idCols  <- list("ID","ID1","ID2","ID3","Year","Month","Element")
varCols <- paste(rep(list("Value","MFlag","QFlag","SFlag"),31),rep(c(1:31),each=4),sep="")
allCols <- c(idCols,varCols)
allList <- as.list(paste(allCols))

这些对象只是暂时在工作区中,因为它们嵌套在自定义函数中。但是,我很想听到更多关于创建对象列表的信息。

4

2 回答 2

3

这有点像在黑暗中拍摄:

x <- 1:5
y <- 1:5
> do.call(cbind,mget(c('x','y')))
     x y
[1,] 1 1
[2,] 2 2
[3,] 3 3
[4,] 4 4
[5,] 5 5

请注意,您需要向量中的字符而不是列表,因此请使用c()not list()

该解决方案的一个弱点是,如果每个对象都是一个原子向量,则结果将是一个矩阵。如果您的所有数据都是数字,这没什么大不了的,您可以使用as.data.frame. 但是如果你在其中混合了一些字符向量,你最终会得到一个字符矩阵,所有的数字向量都转换为字符。

我相信这个缺点可以通过使用cbind.data.frame而不仅仅是cbind.

但是,当然,您的工作区中漂浮着这么多物体这一事实是一个非常糟糕的迹象。通常在 R 中,我们尽量不以这种方式组织我们的对象。最好有相关对象的列表。然后,您可以使用lapply.

于 2013-07-19T22:44:43.890 回答
1

这避免了对矩阵的任何强制:

data.frame(lapply(setNames(your_list, your_list), get))
于 2013-07-20T04:39:44.890 回答