Sto tentando di utilizzare bnlearnpackage per calcolare le probabilità condizionali e sto riscontrando un problema quando si utilizza la funzione "cpquery" all'interno di un ciclo. Ho creato un esempio, mostrato di seguito, utilizzando i dati inclusi nel pacchetto. Quando si utilizza la funzione cpquery in un ciclo, una variabile creata nel ciclo ("evi" nell'esempio) non viene riconosciuta dalla funzione. Ho ricevuto l'errore:Utilizzo della funzione bnlearn "cpquery" all'interno di un loop
Error in parse(text = evi) : object 'evi' not found
Le fasi di creazione di "evi" si basano su esempi forniti dall'autore.
Qualsiasi aiuto che potresti fornire sarebbe fantastico. Sono disperato di trovare un modo in cui posso applicare la funzione cpquery per un gran numero di osservazioni.
library(bnlearn)
data(learning.test)
fitted = bn.fit(hc(learning.test), learning.test)
bn.function <- function(network, evidence_data) {
a <- NULL
b <- nrow(evidence_data)
for (i in 1:b) {
evi <- paste("(", names(evidence_data), "=='",
sapply(evidence_data[i,], as.character), "')",
sep = "", collapse = " & ")
a[i] <- cpquery(network, (C=='c'), eval(parse(text=evi)))
}
return(a)
}
test <- bn.function(fitted, learning.test)
Grazie in anticipo!
Sono stato in contatto con l'autore del pacchetto bnlearn e sembra che l'errore che sto ricevendo sia dovuto a un problema di scoping con la funzione cpquery. Questo è evidente quando sono in grado di far funzionare correttamente la funzione cpquery in un ciclo for che è costruito _outside_ di una funzione definita dall'utente, ma ha l'errore quando lo stesso ciclo viene utilizzato _inside_ di un utente definito funzione. –