3

cols列名を含むリストがあります:

cols <- c('Column1','Column2','Column3')

このコマンドを再現したいのですが、リストを呼び出します。

data.frame(Column1=rnorm(10))

試してみると、次のようになります。

> data.frame(cols[1]=rnorm(10))

Error: unexpected '=' in "data.frame(I(cols[1])="

orでラップcols[1]しても同じことが起こります。I()eval()

data.frame()そのアイテムをベクトルからコマンドにフィードするにはどうすればよいですか?

アップデート:

背景としてcalc.means()、データ フレームと変数のリストを受け取り、大規模で複雑な ddply 操作を実行し、変数によって指定されたレベルで要約する関数を定義しました。

このコマンドで私がやろうとしているのdata.frame()は、集計レベルを一番上まで戻しcalc.means()、各ステップで再実行しrbind()、結果を互いに接着するために使用することです。rbind を適切に機能させるには、「すべて」の値を持つダミー列を追加する必要があります。

cast基本的に、マージンのような機能を ddply に入れていますが、実行ごとに列名を再入力したくありません。完全なコードは次のとおりです。

cols <- c('Col1','Col2','Col3')
rbind ( calc.means(dat,cols),
    data.frame(cols[1]='All', calc.means(dat, cols[2:3])),
    data.frame(cols[1]='All', cols[2]='All', calc.means(dat, cols[3]))
)
4

4 に答える 4

2

使用できますstructure

cols <- c("a","b")

foo <- structure(list(c(1, 2 ), c(3, 3)), .Names = cols, row.names = c(NA, -2L), class = "data.frame")

なぜあなたがこれをしているのか分かりません!

于 2010-04-28T17:21:21.980 に答える
1

直接行う方法はわかりませんが、data.frame()コマンドで名前を割り当てる手順をスキップできます。data.frame()の結果をfooという名前の変数に格納すると仮定すると、次のように簡単に実行できます。

names(foo)<-cols

データフレームが作成された後

于 2010-04-28T16:34:02.160 に答える
1

1つのトリックがあります。リストをいじることができます:

cols_dummy <- setNames(rep(list("All"), 3), cols)

次に、リストへの呼び出しを1つの括弧で使用すると、必要なものが得られるはずです

data.frame(cols_dummy[1], calc.means(dat, cols[2:3]))

オンザフライで使用できますが、setNames(list("All"), cols[1])エレガントではないと思います。

例:

some_names <- list(name_A="Dummy 1", name_B="Dummy 2") # equivalent of cols_dummy from above
data.frame(var1=rnorm(3), some_names[1])
#        var1  name_A
# 1 -1.940169 Dummy 1
# 2 -0.787107 Dummy 1
# 3 -0.235160 Dummy 1
于 2010-04-28T20:14:46.477 に答える