84 lines
2.3 KiB
R
84 lines
2.3 KiB
R
|
loadData <- function(data, xVarNames, responses){
|
||
|
|
||
|
if(class(responses) == "integer" | class(responses) == "numeric"){
|
||
|
responses <- Numeric(responses)
|
||
|
}
|
||
|
|
||
|
covariateList.java <- getCovariateList(data, xVarNames)
|
||
|
|
||
|
textColumns <- list()
|
||
|
for(j in 1:length(xVarNames)){
|
||
|
textColumns[[j]] <- .jarray(as.character(data[,xVarNames[j]]), "S")
|
||
|
}
|
||
|
textData <- convertRListToJava(textColumns)
|
||
|
|
||
|
rowList <- .jcall(.class_RUtils, makeResponse(.class_List), "importDataWithResponses",
|
||
|
responses$javaObject, covariateList.java, textData)
|
||
|
|
||
|
return(list(covariateList=covariateList.java, dataset=rowList))
|
||
|
|
||
|
}
|
||
|
|
||
|
getCovariateList <- function(data, xvarNames){
|
||
|
covariateList <- .jcast(.jnew(.class_ArrayList, length(xvarNames)), .class_List)
|
||
|
|
||
|
for(i in 1:length(xvarNames)){
|
||
|
xName = xvarNames[i]
|
||
|
|
||
|
column <- data[,xName]
|
||
|
|
||
|
if(class(column) == "numeric" | class(column) == "integer"){
|
||
|
covariate <- Java_NumericCovariate(xName, i-1)
|
||
|
}
|
||
|
else if(class(column) == "logical"){
|
||
|
covariate <- Java_BooleanCovariate(xName, i-1)
|
||
|
}
|
||
|
else if(class(column) == "factor"){
|
||
|
lvls <- levels(column)
|
||
|
covariate <- Java_FactorCovariate(xName, i-1, lvls)
|
||
|
}
|
||
|
else{
|
||
|
stop("Unknown column type")
|
||
|
}
|
||
|
|
||
|
.jcall(covariateList, "Z", "add", covariate)
|
||
|
|
||
|
}
|
||
|
|
||
|
return(covariateList)
|
||
|
|
||
|
}
|
||
|
|
||
|
loadPredictionData <- function(newData, covariateList.java){
|
||
|
|
||
|
xVarNames <- character(.jcall(covariateList.java, "I", "size"))
|
||
|
for(j in 1:length(xVarNames)){
|
||
|
covariate.java <- .jcast(
|
||
|
.jcall(covariateList.java, makeResponse(.class_Object), "get", as.integer(j-1)),
|
||
|
.class_Covariate
|
||
|
)
|
||
|
|
||
|
xVarNames[j] <- .jcall(covariate.java, makeResponse(.class_String), "getName")
|
||
|
}
|
||
|
|
||
|
if(any(!(xVarNames %in% names(newData)))){
|
||
|
varsMissing = xVarNames[!(xVarNames %in% names(newData))]
|
||
|
|
||
|
error <- paste0("The following covariates are not present in newdata: ", paste(varsMissing, collapse = ", "))
|
||
|
stop(error)
|
||
|
}
|
||
|
|
||
|
textColumns <- list()
|
||
|
for(j in 1:length(xVarNames)){
|
||
|
textColumns[[j]] <- .jarray(as.character(newData[,xVarNames[j]]), "S")
|
||
|
}
|
||
|
textData <- convertRListToJava(textColumns)
|
||
|
|
||
|
rowList <- .jcall(.class_RUtils, makeResponse(.class_List),
|
||
|
"importData", covariateList.java, textData)
|
||
|
|
||
|
|
||
|
return(rowList)
|
||
|
}
|
||
|
|