2013-10-05 59 views
0

我有一个数据集dat和两个列表xy。我想计算xy的不同组合,其值为k。我写了下面的代码来查找这些不同组合的函数fun的值。但我怎样才能得到k价值最大化功能fun这些不同的组合?因为在每次迭代中,我有不同的列表xy,最后我想找到最大化函数funk找到两个列表中哪个组合最大化的最快方法R

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,但我怎样才能找到没有循环的每个不同的列表?

+0

你可以使用'mapply',尽管我不确定在这种情况下如何 - 如果它更清楚你想要做什么,这可能会简化很多! –

+0

我想创建(1-k)x + ky的所有组合,然后计算每个组合的函数乐趣。然后找到哪个k最大化功能“乐趣”。 – rose

回答

0

我仍然不能使你正在尝试做的正面或反面的,但你的代码似乎归结为这样:

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

这将在k任何大小的工作。它也不需要你的任何names

一些建议:当一个简单的向量可以使用时,不要使用list。您似乎了解%*%乘法的工作原理,您只需要将矩阵转换为正确的格式即可。

+0

感谢您的回复。我怎样才能得到哪个k获得了函数乐趣的最大值? – rose

相关问题