2016-05-13 33 views
0

我的问题如下:如何在R中运行一个函数来观察我的每一个观察结果?

我有6000个观察数据集,包含来自costumers(每个观察是一个客户的信息)的信息。

我才能找到我感兴趣的变量的最佳优化给定函数(对我来说是一个利润函数)。特别是我正在寻找我应该提供的最优利率以最大化我的预期利润。

我没有我的功能有任何疑问。问题是,我不知道我应该如何继续使用这个功能,以便为每个6000个客户获得最佳的利率(或者您喜欢的观察)。

到现在为止,它已经很容易找到这个变量,将最大限度地发挥我的利润的唯一最优(同样为所有客户端)(这是全球最大的我猜的)。但是我需要知道的是,为了将我的优化问题应用到我的6000个观测值中的每一个,我个人应该如何进行,以便为每个客户提供最优利率(这是6000个最优利率,一个为他们每个人)。

我想我应该做类似for循环的东西,但我在这方面的经验是有限的,而且我很沮丧了。更重要的是,我试图像往常一样使用mapply(myfunction,mydata),但我只收到错误消息。

这是怎么了我的(真正)简单的代码现在看起来像:

profits<- function(Rate) 
    sum((Amount*(Rate-1.2)/100)* 
     (1/(1+exp(0.600002438-0.140799335888812* 
        ((Previous.Rate - Rate)+(Competition.Rate - Rate)))))) 

以及用于一个最佳的整个抽查结果:

> optimise(profits, lower = 0, upper = 100, maximum = TRUE) 
$maximum 
[1] 6.644821 

$objective 
[1] 1347291 

所以问题是,我该如何改写我的代码为了最大化这个并获得我的行的每个我感兴趣的变量的最佳?

希望我已经清楚了!谢谢大家!

+2

它始终是好为包括[再现的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610)。这使得其他人更容易帮助你。 – Jaap

+0

你可以使用'apply(dataset,1,FUN = function(obs)...)'如果数据集是一个数据帧,那么函数中的obs参数就是一个命名向量。检查你是否可以使用'with()'或'transform()'。 – jogo

回答

0

它看起来每个客户都是独立的。所以,你只要把lapply()围绕optimize()电话:

lapply(customer_list, function(one_customer){ 
optimise(profits, lower = 0, upper = 100, maximum = TRUE) 
}) 

这将返回一个非常大的列表,其中每个列表元素有$maximum$objective。然后,您可以运行乐谱来总计$maximum,以发现您变得多么有钱!

+0

或者你可以使用'for'循环(这可能会比较慢,但是你可以使用'<-'赋值将最大值存储在观察行的数据框中,并将所有数据紧密关联起来。可能会有很少的时间损失,但是在保持与数据相关的结果方面有一些附加价值。 – sconfluentus

相关问题