Tôi đang cố gắng sử dụng bnlearnpackage để tính toán xác suất có điều kiện và tôi đang gặp sự cố khi chức năng "cpquery" được sử dụng trong vòng lặp. Tôi đã tạo một ví dụ, được hiển thị bên dưới, sử dụng dữ liệu đi kèm với gói. Khi sử dụng hàm cpquery trong một vòng lặp, một biến được tạo trong vòng lặp ("evi" trong ví dụ) không được hàm nhận biết. Tôi nhận được lỗi:Sử dụng bnlearn Chức năng "cpquery" Trong vòng lặp
Error in parse(text = evi) : object 'evi' not found
Các bước tạo "evi" dựa trên các ví dụ do tác giả cung cấp.
Bất kỳ trợ giúp nào bạn có thể cung cấp đều tuyệt vời. Tôi đang tuyệt vọng để tìm một cách mà tôi có thể áp dụng các chức năng cpquery cho một số lượng lớn các quan sát.
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)
Cảm ơn bạn trước!
Tôi đã liên lạc với tác giả của gói bnlearn và có vẻ như lỗi tôi nhận được là do vấn đề phạm vi với chức năng cpquery. Điều này hiển nhiên khi tôi có thể nhận hàm cpquery hoạt động đúng trong vòng lặp for được xây dựng _outside_ của hàm do người dùng định nghĩa, nhưng có lỗi khi cùng một vòng lặp được sử dụng _inside_ của người dùng định nghĩa chức năng. –