2017-03-27 28 views
0

我希望能夠有東西要調用的函數下面這樣寫一個函數,它用引號字符串參數

conditional_prob_bool(Class=='democrat',V1=='y',df) 

,並有

consequent_bool=df$Class=='democrat' 

antecedent_bool=df$V1=='y' 

在功能體內部。

但它似乎並不按我想要的方式工作,可能是因爲引號。有人可以建議我如何改變代碼,以便我可以得到這些作業?

install.packages("mlbench") 
install.packages("mice") 
library(mlbench) 
library(mice) 
data("HouseVotes84") 
imputeddf=mice(HouseVotes84,m=1,maxit=50,meth='pmm',seed=500) 
completedData <- complete(imputeddf,1) 
df=completedData 
df$names<-rownames(df) 
conditional_prob_bool=function(spec1,spec2,df){ 

    consequent_bool=df$spec1 
    consequent_event=df[consequent_bool,] 

    antecedent_bool=df$spec2 
    antecedent_event=df[antecedent_bool,] 

    return(prob(intersect_event(consequent_event,antecedent_event,df),df)/prob(antecedent_event,df)) 
} 

#Currently when I run it I get 
> conditional_prob_bool(Class=='democrat',V1=='y',df) 
[1] NaN 
#however manually running the body like this, I get what I want. 
> consequent_bool=df$Class=='democrat' 
> consequent_event=df[consequent_bool,] 
> antecedent_bool=df$V1=='y' 
> antecedent_event=df[antecedent_bool,] 
> prob(intersect_event(consequent_event,antecedent_event,df),df)/prob(antecedent_event,df) 
[1] 0.8376963 

謝謝。

+0

我覺得你不能在你的函數中直接寫'Class =='democrat''作爲參數。例如,一種方法可能是創建兩個參數來區分'Class'和''democrate''。但在此之前,你應該一行一行地嘗試你的函數,看看它是否有效(例如通過返回一個值),因爲它似乎是你在一個塊中寫入而沒有測試它。 –

+0

在我看來,你似乎試圖實施非標準評估。嘗試用'eval(替代(spec1),df)'替換'consequent_bool = df $ spec1'',對於'spec2'也是如此。查看http://adv-r.had.co.nz/Computing-on-the-language.html中的'substitute'例子。它可能有幫助。 – ikop

+0

謝謝。我會嘗試。 \t 對不起,我不確定你直接寫的是什麼意思?我認爲這就是我所做的。再次感謝 – matt

回答

0

下面是函數:

conditional_prob_bool <- function(spec11, spec12, spec21, spec22, df){ 

    consequent_bool <- df[,spec11] == spec12 
    consequent_event <- df[consequent_bool,] 

    antecedent_bool <- df[,spec21] == spec22 
    antecedent_event=df[antecedent_bool,] 

    return(prob(intersect_event(consequent_event,antecedent_event,df),df)/prob(antecedent_event,df)) 
} 

結果:

> conditional_prob_bool('Class', 'democrat', 'V1', 'y', df) 
[1] 0.8376963 

正如我告訴你,如果你的功能不起作用,調試它逐行看到那裏的錯誤來自。

+0

謝謝。我正在嘗試您建議的調試方法。在stackoverflow有沒有辦法確認提供的解決方案是正確的?我試過了,它確實有效。 – matt

+0

@matt在我的答案左側,並在投票下按鈕下 –

相關問題