0

リストに格納されているいくつかのデータ フレームをマージしています。そのために、.dfコマンドで for ループを使用しています。ここで、ループ内のようsuffixesにデータ フレームの名前を使用したいと思います。paste

現在ループ内にfor ( .df in [list]) {あるデータフレームの名前を減算できるコマンドを使用する方法はありますか?.df

このリストに 3 つのデータ フレームがあるとします。

a <- list(A = data.frame(a=runif(2), b=runif(2)), 
          B = data.frame(a=runif(2), b=runif(2)), 
          C = data.frame(a=runif(2), b=runif(2)))
a

$A
          a         b
1 0.2833226 0.6242624
2 0.1741420 0.1707722

$B
           a         b
1 0.55073381 0.6082305
2 0.08678421 0.5192457

$C
           a         b
1 0.02788030 0.1392156
2 0.02171247 0.7189846

さて、このループを使いたいのですが、

for ( .df in a) {
 print(['command I do not know about'])
                }

次に、[私が知らないコマンド] で A、B、C (つまり、 のデータ フレームの名前.df) を出力します。

それをしてもいいですか?

更新 2012-04-28 20:11:58 PDT

これは、上記の単純なループを使用して、出力から期待されるものの抜粋です。

for ( .df in a) {
 print(['command I do not know about'](a))
                }

[1] "A"
[1] "B"
[1] "C"

私はこれを使用してこれを得ることができました、

for (x in names(a)) {
    print(x)
    }

しかし、私がやっていることの性質上for ( .df in [list]) {、for ループでコマンドを使用したいと思います。

4

2 に答える 2

4

名前と値の両方を抽出するために、値をループすることはできません。インデックスまたは名前のいずれかをループできます。

# Loop over indices (faster, more cumbersome)
ns <- names(a)
for(i in seq_along(a)) {
   v <- a[[i]]     # extract value
   n <- ns[[i]]    # extract name
   cat(n, ": \n")
   str(v)
}

# Loop over names (easy but slower)
for(n in names(a)) {
   v <- a[[n]]     # extract value
   cat(n, ": \n")
   str(v)
}

...名前のループと値の抽出は、長いベクトルの場合、非常に遅くなる可能性があります (n^2 時間の複雑さがあります)。

于 2012-04-29T03:41:42.597 に答える
0

for ループではなく、lapply ですが、for ループと同様に機能します。mrdwabの答えがそれだと思ったので混乱していますが、これが役立つかもしれません。

FUN <-function(i){
    x <- a[[i]]
    data.frame(name=rep(names(a)[[i]], nrow(x)), x)
}

LIST <- lapply(seq_along(a), FUN)

do.call("rbind", LIST)

収量:

  name          a         b
1    A 0.90139624 0.9739355
2    A 0.34311009 0.6621689
3    B 0.07585535 0.6010289
4    B 0.37292887 0.7260832
5    C 0.17814913 0.1433650
6    C 0.24586101 0.1741114
于 2012-04-29T03:29:44.003 に答える