60060


R言語でのfor文の変数名の変更の仕方が分かりません。  
例えば，，，data_01,data_02,data_03 があり，

[code]

    for(i in 1:2){
           data_i<-data_i+1
    ｝
    
[/code]

このようにしたいのですが，やり方が分かりません。  
よろしくお願いします。


CC BY-SA 4.0
2019-10-28T16:11:20.633
60048
2021-09-02T09:56:47.513
36393
question
r
R言語　for文での変数名の変更について


`eval`で文字列を実行してくれます。  
`data_01`のように数字が0埋めされているのであれば、for文の中の`i`を`formatC(i, width=2,
flag=0)`に変えればOKです。

[code]

    for (i in 1:2){
        eval(parse(text = paste0('data_', i, '<- data_', i, '+ 1')))
    }
    
[/code]


CC BY-SA 4.0
2019-10-29T00:11:20.757
60059
2019-10-29T00:21:45.553
2019-10-29T00:21:45.553
36395
36395
60048
answer


`get()` と `assign()` を使う方法です。

[code]

    data_01 <- 1
    data_02 <- 2
    data_03 <- 3
    
    print(c(data_01, data_02, data_03))
    for(i in 1:3){
      nth <- paste0("data_", formatC(i, width=2, flag="0"))
      assign(nth, get(nth) + 1)
    }
    print(c(data_01, data_02, data_03))
    
    =>
    [1] 1 2 3
    [1] 2 3 4
    
[/code]


CC BY-SA 4.0
2019-10-29T00:51:44.733
60060
2019-10-29T00:51:44.733
60048
answer


そのような時は、ぜひRの醍醐味である「ベクトル」を使ってみて下さい

[code]

    data <- NULL
    
    for(i in 1:2){
        data[i] <- i
    }
    
    print(data)
    
[/code]

このような出力が得られます。

[code]

    > data
    [1] 1 2
    
[/code]

こうするメリットは、要素の数が増えてもコードは増えない事です：

[code]

    data <- NULL
    
    for(i in 1:100){
        data[i] <- i
    }
    
    print(data)
    
[/code]

全く同じコードで、データが増えても処理できます。

[code]

    > data
      [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19
     [20]  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38
     [39]  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57
     [58]  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76
     [77]  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95
     [96]  96  97  98  99 100
    
[/code]

このように格納されていると、任意の場所だけを切り出すのも、とってもラクちんです。

[code]

    > data[10:15]
    [1] 10 11 12 13 14 15
    
[/code]

最後に、Rは各種ベクトル演算が他のどの言語よりも短く簡素に書ける言語です。

[code]

    data <- 1:100
    
[/code]

ご質問の処理は、これだけで完了できますよ


CC BY-SA 4.0
2019-10-29T10:24:18.807
60078
2021-09-02T09:56:47.513
2021-09-02T09:56:47.513
32676
32676
60048
answer