我希望能夠有東西要調用的函數下面這樣寫一個函數,它用引號字符串參數
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
謝謝。
我覺得你不能在你的函數中直接寫'Class =='democrat''作爲參數。例如,一種方法可能是創建兩個參數來區分'Class'和''democrate''。但在此之前,你應該一行一行地嘗試你的函數,看看它是否有效(例如通過返回一個值),因爲它似乎是你在一個塊中寫入而沒有測試它。 –
在我看來,你似乎試圖實施非標準評估。嘗試用'eval(替代(spec1),df)'替換'consequent_bool = df $ spec1'',對於'spec2'也是如此。查看http://adv-r.had.co.nz/Computing-on-the-language.html中的'substitute'例子。它可能有幫助。 – ikop
謝謝。我會嘗試。 \t 對不起,我不確定你直接寫的是什麼意思?我認爲這就是我所做的。再次感謝 – matt