Got some progress on this, but still not sure how to continue. First, a much more simple script reproducing the behaviour that confuses me:
foo <- function(x, ...) structure(x, class = 'foo') `[.foo` <- function(x, i, ..., drop = TRUE) { print(sys.call()) print(match.call()) foo(NextMethod()) # x[] should return an object of class foo } `[<-.foo` <- function(x, i, ..., value) { print(sys.call()) print(match.call()) x[i, ..., drop = FALSE] # imagine that we need to perform some checks on the # subset of x that we're about to replace NextMethod() } x <- foo(42) x[] # this works x[] <- 1 # this doesn't Now, the crucial difference between the x[] and x[] <- 1 calls is that in the former case, the `i` argument isn't even specified: x[] # `[.foo`(x, ) # `[.foo`(x = x) # [1] 42 # attr(,"class") # [1] "foo" While in the latter case, `i` is specified in the x[] call (but missing): x[] <- 1 # `[<-.foo`(`*tmp*`, , value = 1) # `[<-.foo`(x = `*tmp*`, value = 1) # x[i, ..., drop = FALSE] # `[.foo`(x = x, i = i, drop = FALSE) Error in NextMethod() : argument "i" is missing, with no default What's the best way to forward the arguments from [<-.class methods to the [.class methods in order to handle cases like x[] properly? -- Best regards, Ivan ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.