20443


下の問題を解きたいのですがうまく行きません。  
Rでexpand.gridを使いましたがメモリオーバーしました。

Q, max(performance1+performance2)

ただし num1+num2<=1000

data1.txtとdata2.txtで両者ともタブ区切りのファイルです。  
変数は3つ以上ありますが簡単のため省略しました。  
とりあえずパフォーマンスが最大になる時（制約を満たして）の組み合わせだけでも取得できたらと思っています。  
できたらパフォーマンス最大の時の列の取得、もしくはそれぞれの行の取得もしたいです。

[code]

            performance1  num1  hoge1
    1                 12    15   3.2
    2                 11  12.1   2.4
    
            performance2 num2   hoge2
    1               25.3   14     2.6
    2                 21 18.3     4.1
    
[/code]

あまりメモリを食わない方法でお願いします。  
dplyrなどパッケージは好きなものを使って構わないです。  
よろしくお願い致します。


CC BY-SA 3.0
2015-12-28T16:50:03.133
20438
2015-12-29T03:37:47.350
12457
question
r
最大値を取る時の組み合わせ


`expand.grid()` の代わりに単純ループを使ってみました。

[code]

    data1 <- read.table("data1.txt", sep="\t", header=T)
    data2 <- read.table("data2.txt", sep="\t", header=T)
    pf <- -Inf
    max <- list()
    for(i in seq(nrow(data1))){
      for(j in seq(nrow(data2))){
        if (data1[i,"num1"] + data2[j,"num2"] <= 1000) {
          d1 <- data1[i,"performance1"]
          d2 <- data2[j,"performance2"]
          if ((d1+d2) > pf) {
            pf <- (d1+d2)
            max <- list(c(i, j), c(d1, d2))
          }
        }
      }
    }
    
[/code]

`max` に `performance` の和が最大になる場合の行番号と値の組み合わせが格納されます。


CC BY-SA 3.0
2015-12-29T03:37:47.350
20443
2015-12-29T03:37:47.350
20438
answer