我已尝试过本网站上列出的很多内容,但据我所知,还没有回答这个问题。
我有一个字符列表,用于指定工作区中的对象名称。这些对象中的每一个都表示我想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))
这些对象仅暂时位于工作空间中,因为它们嵌套在自定义函数中。但是,我很想听到有关创建对象列表的更多信息。
答案 0 :(得分: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()
而不是list()
。
该解决方案的一个缺点是,如果每个对象都是原子向量,则结果将是矩阵。如果您的所有数据都是数字的,这不是一个大问题,您可以使用as.data.frame
简单地强制转换为数据框。但是如果你在那里混合了一些字符向量,你将得到一个字符矩阵,所有数字向量都转换为字符。
我认为可以使用cbind.data.frame
而非cbind
来修复此缺点。
但是,当然,你工作区中有很多物体浮动的事实是一个非常糟糕的迹象。通常在R中,我们尽量不以这种方式组织对象。有更好的相关对象列表。然后,您可以使用lapply
等工具快速,紧凑地对其进行操作。
答案 1 :(得分:1)
这避免了对矩阵的任何强制:
data.frame(lapply(setNames(your_list, your_list), get))