parseStudentRecord: Covert Student Records to/from JSON

parseStudentRecordR Documentation

Covert Student Records to/from JSON

Description

The as.json function takes an StudentRecord (among other objects) and turns it into JSON. The function parseStudentRecord takes the list produced as the output to fromJSON and turns it back into an StudentRecord object.

Usage

parseStudentRecord(rec)
## S4 method for signature 'StudentRecord,list'
as.jlist(obj, ml, serialize=TRUE)

Arguments

rec

A list which comes from running fromJSON on a JSON string, or database extraction method.

obj

The object being serialized; usually attributes(obj).

ml

A list of fields of the object.

serialize

A logical flag. If true, serializeJSON is used to protect the data field (and other objects which might contain complex R code.

Details

See the description for as.json for more description of the general JSON conversion prototocl.

The StudentRecord contains a Pnet field in the student model. This takes some post-processing to to properly restore.

The as.jlist method for the StudentRecord serializes the sm field using the PnetSerialize method. This produces a slob (string large object) which is stored in the smser field of the StudentRecord.

The parseStudentRecord function restores the smser field, but not the sm field. This must be done in the context of the StudentRecordSet, or equivalently the PnetWarehouse, which is currently managing the networks. To finish the process, call fetchSM to restore the student model network.

Value

The function parseStudentRecord returns a student record object with the student model not yet initialized.

The as.jlist method returns a list which can be passed to toJSON to produce legible JSON from the R object.

Author(s)

Russell Almond

See Also

StudentRecord, as.json, getOneRec, getManyRecs

fetchSM, PnetSerialize

Examples



## Requires PNetica
library(PNetica)  ## Must load to setup Netica DLL
app <- "ecd://epls.coe.fsu.edu/EITest"
sess <- RNetica::NeticaSession()
RNetica::startSession(sess)

config.dir <- file.path(library(help="Peanut")$path, "auxdata")
net.dir <- file.path(library(help="PNetica")$path,"testnets")

netman <- read.csv(file.path(config.dir, "Mini-PP-Nets.csv"),
                    row.names=1, stringsAsFactors=FALSE)
stattab <- read.csv(file.path(config.dir, "Mini-PP-Statistics.csv"),
                    as.is=TRUE)

Nethouse <- PNetica::BNWarehouse(netman,session=sess,
             address=net.dir)

cl <- new("CaptureListener")
listeners <- list("cl"=cl)

ls <- ListenerSet(sender= paste("EAEngine[",app,"]"),
                  db=MongoDB(noMongo=TRUE), listeners=listeners)

eng <- newBNEngineNDB(app=app,warehouse=Nethouse,
                     listenerSet=ls,manifest=netman,
                     profModel="miniPP_CM",
                     histNodes="Physics",
                     statmat=stattab,
                     activeTest="EAActive.txt")

## Standard initialization methods.
loadManifest(eng,netman)
eng$setHistNodes("Physics")
configStats(eng,stattab)
setupDefaultSR(eng)

recset <- eng$studentRecords()

sr0 <- getRecordForUser(eng,"S1")
eap0 <- stat(sr0,"Physics_EAP")

sr0.ser <- as.json(sr0)
sr0a <- parseStudentRecord(jsonlite::fromJSON(sr0.ser))
sr0a <- fetchSM(sr0a,recset$warehouse())
## This should relink to the same student model
stopifnot(sm(sr0a)==sm(sr0),abs(eap0-stat(sr0a,"Physics_EAP")) <.0001)

## Next add some evidence and test again.

e1 <- EvidenceSet(uid="S1",app="Test",context="PPcompEM",
                  obs=list("CompensatoryObs"="Right"))

e1 <- logEvidence(eng,sr0,e1)
sr1 <- accumulateEvidence(eng,sr0,e1)
eap1 <- stat(sr1,"Physics_EAP")
sr1.ser <- as.json(sr1)

## Force delete student model to make sure that it is properly
## recovered.
WarehouseFree(Nethouse,PnetName(sm(sr1)))
stopifnot(!is.active(sm(sr1)))  # No longer active.

sr1a <- parseStudentRecord(jsonlite::fromJSON(sr1.ser))
sr1a <- fetchSM(sr1a,recset$warehouse())
eap1a <- stat(sr1a,"Physics_EAP")
stopifnot(all(evidence(sr1)==evidence(sr1a)),
          abs(eap1-eap1a) <.001)




ralmond/EABN documentation built on Aug. 30, 2023, 12:52 p.m.