2017-07-08 17 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() 
関連する問題