2016-05-13 93 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