0

データセットdatと 2 つのリストxy. xyの異なる値の異なる組み合わせを計算したいと思いますkfunこれらのさまざまな組み合わせの関数の値を見つけるために、次のコードを書きました。しかし、これらの異なる組み合わせkの関数を最大化する値を取得するにはどうすればよいですか? fun各反復では、xとの異なるリストがあるため、最後に関数を最大化するyを見つけたいと思います。kfun

    dat = c(9, 2, 7)
    k = seq(0, 1, length = 10)
    x =list(a = 1, b = 8, c = 4)
    y = list(a = .5, b = 5, c = 5)
    matrix = cbind(unlist(x), unlist(y)) %*% rbind(1-k, k)
    z = apply(matrix, 2, as.list)
    fun = function(dat, vec) sum(vec$a * dat - vec$b * dat + vec$c * dat)
    res = rep(0, length(k))
    for (i in 1:(length(k))){
        v = split(unlist(z[[i]]), sub("\\d+$", "", names(z[[i]])))
        res[i] = fun(dat, v)
    }

   > res
   [1] -54 -47 -40 -33 -26 -19 -12  -5   2   9

この例では k = 10 ですが、ループなしですべての異なるリストを見つけるにはどうすればよいでしょうか?

4

1 に答える 1

0

私はまだあなたがやろうとしていることの頭や尾を作ることはできませんが、あなたのコードはこれに要約されるようです:

colSums(matrix(rep(dat,nrow(matrix)),ncol=nrow(matrix)) %*% (matrix*c(1,-1,1)))

これは、任意のサイズで機能しkます。また、names.

いくつかのアドバイス:list単純なベクトルで十分な場合は使用しないでください。乗算がどのように機能するかを理解しているようです%*%。行列を正しい形式にする必要があるだけです。

于 2013-10-05T07:45:17.910 に答える