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()

このソリューションの弱点の 1 つは、各オブジェクトが原子ベクトルの場合、結果が行列になることです。すべてのデータが数値である場合、これは大したことではありませんas.data.frame。しかし、そこにいくつかの文字ベクトルが混在している場合、すべての数値ベクトルが文字に変換された文字行列になります。

この欠点はcbind.data.framecbind.

しかしもちろん、ワークスペースにこれほど多くのオブジェクトが浮かんでいるという事実は、非常に悪い兆候です。通常、R では、オブジェクトをそのように編成しないようにします。関連するオブジェクトのリストを持っている方がはるかに優れています。次に、 などのツールを使用して、グループとして迅速かつコンパクトに操作できますlapply

于 2013-07-19T22:44:43.890 に答える
1

これにより、行列への/からの強制が回避されます。

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