39 lines
1.5 KiB
R
39 lines
1.5 KiB
R
|
|
||
|
|
||
|
# Internal function. Takes a censoring distribution and turns it into a
|
||
|
# RightContinuousStepFunction Java object.
|
||
|
processCensoringDistribution <- function(censoringDistribution){
|
||
|
|
||
|
if(is.numeric(censoringDistribution)){
|
||
|
# estimate ECDF
|
||
|
censoringTimes <- .jarray(censoringDistribution, "D")
|
||
|
java.censoringDistribution <- .jcall(.class_Utils, makeResponse(.class_RightContinuousStepFunction), "estimateOneMinusECDF", censoringTimes)
|
||
|
|
||
|
} else if(is.list(censoringDistribution)){
|
||
|
# First check that censoringDistribution fits the correct format
|
||
|
if(is.null(censoringDistribution$x) | is.null(censoringDistribution$y)){
|
||
|
stop("If the censoringDistribution is provided as a list, it must have an x and a y item that are numeric.")
|
||
|
}
|
||
|
|
||
|
if(length(censoringDistribution$x) != length(censoringDistribution$y)){
|
||
|
stop("x and y in censoringDistribution must have the same length.")
|
||
|
}
|
||
|
|
||
|
if(!is.numeric(censoringDistribution$x) | !is.numeric(censoringDistribution$y)){
|
||
|
stop("x and y in censoringDistribution must both be numeric.")
|
||
|
}
|
||
|
|
||
|
java.censoringDistribution <- createRightContinuousStepFunction(censoringDistribution$x, censoringDistribution$y, defaultY = 1.0)
|
||
|
|
||
|
} else if("stepfun" %in% class(censoringDistribution)){
|
||
|
x <- stats::knots(censoringDistribution)
|
||
|
y <- censoringDistribution(x)
|
||
|
|
||
|
java.censoringDistribution <- createRightContinuousStepFunction(x, y, defaultY = 1.0)
|
||
|
}
|
||
|
else{
|
||
|
stop("Invalid censoringDistribution")
|
||
|
}
|
||
|
|
||
|
return(java.censoringDistribution)
|
||
|
}
|