Joshua Daly
Joshua Daly

Reputation: 626

Validity test error when defining fields in a Reference Class

Context

I've defined two RCs. The first is VectorCharacterElements. I've assigned a validity test to it.

VectorCharacterElements <- setRefClass(
  "VectorCharacterElements",
  fields = list(vec = "character", el1 = "character", el2 = "character")
)

ValidVectorCharacterElements <- function(object) {
  if (length(object$vec) < 2) {
    cat("Length of `vec` must be greater than or equal to two.")
    cat("\n")
    return(F)
  } 
  return(T)
}

setValidity("VectorCharacterElements", ValidVectorCharacterElements)

I'm trying to define a second RC, VectorCharacterElementsDistance. It uses VectorCharacterElements as a field.

VectorCharacterElementsDistance <- setRefClass(
  "VectorCharacterElementsDistance",
  fields = list(vce = "VectorCharacterElements", d = "numeric")
)

However, I'm getting an error when I run the above code.

Length of vec must be greater than or equal to two. Error in validObject(.Object) : invalid class “VectorCharacterElements” object: FALSE

The error is from the validation method I defined for VectorCharacterElements.

Question

How can I keep validation for VectorCharacterElements, and ensure vce is of type VectorCharacterElements in VectorCharacterElementsDistance?

Observations

The error won't present itself if I use contains.

VectorCharacterElementsDistance <- setRefClass(
  "VectorCharacterElementsDistance",
  contains = "VectorCharacterElements",
  fields = list(d = "numeric")
)

But, I would like to avoid inheriting from VectorCharacterElements.

Upvotes: 1

Views: 42

Answers (0)

Related Questions