Поскольку вы уже используете некоторую диспетчеризацию метода S3 с class(obj) <- "class"
, вы должны иметь возможность:
`[.rolls` <- function(obj, ind) obj$rolls[ind]
`[<-.rolls` <- function(obj, ind, value) { obj[["rolls"]][ind] <- value; obj; }
Некоторые поддельные данные:
foo <- list(rolls=10L+1:5, sides=6, probs = 1/6)
class(foo) <- "rolls"
foo[3]
# [1] 13
foo[3] <- 99L
foo
# $rolls
# [1] 11 12 99 14 15
# $sides
# [1] 6
# $probs
# [1] 0.1666667
# attr(,"class")
# [1] "rolls"
Вы можете зайти так далеко, чтобы красиво распечатать объект, хотя он имеет только интерактивное использование:
print.rolls <- function(x, ...) {
cat("<Rolls>\n")
cat(" len: ", length(x[["rolls"]]), "\n")
cat(" other properties: ", paste(sort(setdiff(names(x), "rolls")), collapse = ", "), "\n")
}
foo
# <Rolls>
# len: 5
# other properties: probs, sides