75221


R言語を用いています。  
ベクトル要素を規則にしたがって自動的に順番に取り出していき、さらにそれを  
自動的に名付けられたオブジェクトにそれぞれ格納していくにはどうすればよろしいのでしょうか。

例えば、下記のような3列×4行のデータがあったとします。

[code]

    1,3,5
    2,1,3
    3,1,3
    8,0,3
    
[/code]

このうち、2列目の数字3, 1, 1, 0を上の行から順番に取り出していき、さらにそれを  
data1, data2, data3, data4というオブジェクトに格納していきたいのです  
（御覧のように、これらのオブジェクト名はdataという4文字は共通していますが、  
順番に応じて最後の数字が異なります）。

ループに関する本やウェブサイトを色々と見てみたのですが、いずれも四則演算に関する  
例で、上記の処理の仕方についてはわかりませんでした。

要約すると、下記の３点のプロセスになるのではないかと考えております。

  1. 2列目の数字3,1,1,0を上から順番にループを用いて自動で抽出していく
  2. ループを用いて自動で名前を付けたオブジェクト名（data1からdata4）を作成する
  3. ループを用いて、1. で抽出した数字を 2. のオブジェクトに順番にそれぞれ格納していく

お手数をおかけいたしますが、お教え頂けましたら幸いです。


CC BY-SA 4.0
2021-04-12T05:00:19.963
75220
2021-04-12T06:03:28.923
2021-04-12T05:30:12.350
3060
44769
question
r
R言語でループを用いて順番に要素を取り出し、それぞれ別のオブジェクトに自動で格納していく方法


過去に同様の質問が為されていて、`assign` 関数を使う回答が投稿されています。

  * [R言語におけるループでの複数のオブジェクトの処理](https://ja.stackoverflow.com/a/2732/16894)
  * [Rで連番のデータフレームを加工して連番で出力する](https://ja.stackoverflow.com/a/35608/16894)
  * [Rで計算結果を保存した複数のオブジェクトを一度に生成したい](https://ja.stackoverflow.com/a/35179/16894)

以上の回答を参考にすると以下の様になります。

[code]

    df <- data.frame(
      cbind(
        c(1, 2, 3, 8),
        c(3, 1, 1, 0),
        c(5, 3, 3, 3)
      ))
    print(df)
    cat('\n')
    
    for(i in 1:nrow(df))
      assign(sprintf('data%d', i), df[i,2])
    
    print(data1)
    print(data2)
    print(data3)
    print(data4)
    
    =>
      X1 X2 X3
    1  1  3  5
    2  2  1  3
    3  3  1  3
    4  8  0  3
    
    [1] 3
    [1] 1
    [1] 1
    [1] 0
    
[/code]


CC BY-SA 4.0
2021-04-12T06:03:28.923
75221
2021-04-12T06:03:28.923
75220
answer