質問: 下の問題を解きたいのですがうまく行きません。 Rでexpand.gridを使いましたがメモリオーバーしました。 Q, max(performance1+performance2) ただし num1+num2<=1000 data1.txtとdata2.txtで両者ともタブ区切りのファイルです。 変数は3つ以上ありますが簡単のため省略しました。 とりあえずパフォーマンスが最大になる時(制約を満たして)の組み合わせだけでも取得できたらと思っています。 できたらパフォーマンス最大の時の列の取得、もしくはそれぞれの行の取得もしたいです。 ``` 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 ``` あまりメモリを食わない方法でお願いします。 dplyrなどパッケージは好きなものを使って構わないです。 よろしくお願い致します。
回答: `expand.grid()` の代わりに単純ループを使ってみました。 ``` 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)) } } } } ``` `max` に `performance` の和が最大になる場合の行番号と値の組み合わせが格納されます。