0

我有一个数据集dat和两个列表xy. 我想计算不同的组合xy不同的值kfun我编写了以下代码来查找这些不同组合的函数值。但是我怎样才能得到这些不同组合的k最大化功能的值呢?fun因为在每次迭代中我都有不同的xand列表,y最后我想找到k最大化函数的fun

    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 回答