2017-07-08 47 views
0

任何人都可以解釋如何解決這個錯誤?我意識到我沒有提供所有的代碼。數據來自衆所周知的天氣高爾夫數據。我得到的錯誤是錯誤probPCNB(varClass =「play」,valueClass = i,inputVar1 =「windy」,: 承諾已經在評估中:遞歸默認參數引用或更早的問題?我已經看到了一些答案樣的問題,但我不完全理解他們,尤其是在這種情況下。Althougt有一些解決這一錯誤等問題,其中誤差來自於這種情況目前尚不清楚。R錯誤:承諾已經在評估

golf=read.csv(file="weather.nominal.csv") 
df=as.data.frame(golf) 
df$names<-rownames(df) 


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)) 
} 



predNBVar2=function(varClass='play',inputVar1='windy',var1Level='TRUE',inputVar2='humidity',var2Level="high",df=df){ 
    ##probPCNB(varClass='play', valueClass='yes', inputVar1='windy',var1Level='TRUE',inputVar2='humidity',var2Level="high",df) 
    #browser() 
    #lev2=levels(df[,varClass]) 
    lev2=c('yes','no') 
    #lev2=levels(df$varClass) 
    countt=0 
    classprob=0 
    predictedclass=lev2[1] 
    for(i in lev2){ 
    p=probPCNB(varClass='play', valueClass=i, inputVar1='windy',var1Level='TRUE',inputVar2='humidity',var2Level="high",df=df) 
    if(classprob<p){ 
     classprob=p 
     predictedclass=i 
    } 


    } 
    return(paste("best",predictedclass," with measure",classprob)) 

} 




probPCNB=function(varClass='play', valueClass='true', inputVar1='windy',var1Level=TRUE,inputVar2='humidity',var2Level='high',df){ 
    #browser() 

    A_bool=df[,inputVar1]==var1Level & df[,inputVar2]==var2Level 
    A=df[A_bool,] 

    class_bool=df[,varClass]==valueClass 
    classE=df[class_bool,] 


    numerator=prob(classE,df)*conditional_prob_bool(inputVar1, var1Level,varClass,valueClass,df)*conditional_prob_bool(inputVar2, var2Level,varClass,valueClass,df) 


    lev=levels(df[,varClass]) 
    denominator=0 

    for(i in lev){ 

    class_bool=df[,varClass]==i 

    classE=df[class_bool,] 
    class=i 
    denominator= denominator+(prob(classE,df)*conditional_prob_bool(inputVar1, var1Level,varClass,class,df)* 
           conditional_prob_bool(inputVar2, var2Level,varClass,class,df)) 

    } 
    return(numerator/denominator) 

} 

predNBVar2() 

回答

1

這是因爲自變量df = df

將df重命名爲其他內容並且它應該可以工作

另請參閱:promise already under evaluation: recursive default argument reference or earlier problems?

golf=read.csv(file="weather.nominal.csv") 
df=as.data.frame(golf) 
df$names<-rownames(df) 


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)) 
} 



predNBVar2=function(varClass='play',inputVar1='windy',var1Level='TRUE',inputVar2='humidity',var2Level="high",df_predNBVar2=df){ 
    ##probPCNB(varClass='play', valueClass='yes', inputVar1='windy',var1Level='TRUE',inputVar2='humidity',var2Level="high",df_predNBVar2) 
    #browser() 
    #lev2=levels(df[,varClass]) 
    lev2=c('yes','no') 
    #lev2=levels(df$varClass) 
    countt=0 
    classprob=0 
    predictedclass=lev2[1] 
    for(i in lev2){ 
    p=probPCNB(varClass='play', valueClass=i, inputVar1='windy',var1Level='TRUE',inputVar2='humidity',var2Level="high",df=df_predNBVar2) 
    if(classprob<p){ 
     classprob=p 
     predictedclass=i 
    } 


    } 
    return(paste("best",predictedclass," with measure",classprob)) 

} 




probPCNB=function(varClass='play', valueClass='true', inputVar1='windy',var1Level=TRUE,inputVar2='humidity',var2Level='high',df){ 
    #browser() 

    A_bool=df[,inputVar1]==var1Level & df[,inputVar2]==var2Level 
    A=df[A_bool,] 

    class_bool=df[,varClass]==valueClass 
    classE=df[class_bool,] 


    numerator=prob(classE,df)*conditional_prob_bool(inputVar1, var1Level,varClass,valueClass,df)*conditional_prob_bool(inputVar2, var2Level,varClass,valueClass,df) 


    lev=levels(df[,varClass]) 
    denominator=0 

    for(i in lev){ 

    class_bool=df[,varClass]==i 

    classE=df[class_bool,] 
    class=i 
    denominator= denominator+(prob(classE,df)*conditional_prob_bool(inputVar1, var1Level,varClass,class,df)* 
           conditional_prob_bool(inputVar2, var2Level,varClass,class,df)) 

    } 
    return(numerator/denominator) 

} 

predNBVar2()