27 апреля 2024 г. 00:49:47 GMT+03:00, Leo Mada via R-package-devel <r-package-devel@r-project.org> пишет: >Dear List-Members, > >I try to implement a proj.line3d method and to overload this method as follows: > >proj.line3d <- function(p, x, y, z, ...) > UseMethod("proj.line3d") > >proj.line3d.numeric = function(p, x, y, z, ...) { > # ... >} > >proj.line3d.matrix = function(p, x, y, z, ...) { > # ... >}
>p = c(1,2,3) >line = matrix(c(0,5,2,3,1,4), 2) >proj.line3d(p, line) ># Error in UseMethod("proj.line3d") : ># no applicable method for 'proj.line3d' applied to an object of class >"c('double', 'numeric')" >methods(proj) ># [1] proj.aov* proj.aovlist* proj.default* proj.line3d ># [5] proj.line3d.matrix proj.line3d.numeric proj.lm In your NAMESPACE, you've registered methods for the generic function 'proj', classes 'line3d.matrix' and 'line3d.numeric', but above you are calling a different generic, 'proj.line3d', for which no methods are registered. For proj.line3d(<numeric>, <matrix>) to work, you'll have to register the methods for the proj.line3d generic. If you need a visible connection to the proj() generic, you can try registering a method on the 'proj' generic, class 'line3d' *and* creating a class 'line3d' that would wrap your vectors and matrices: proj(line3d(p), line) -> call lands in proj.line3d -> maybe additional dispatch on the remaining classes of 'p'? This seems to work, but I haven't tested it extensively: > proj.line3d <- \(x, ...) UseMethod('proj.line3d') > proj.line3d.numeric <- \(x, ...) { message('proj.line3d.numeric'); x } > line3d <- \(x) structure(x, class = c('line3d', class(x))) > proj(line3d(pi)) proj.line3d.numeric [1] 3.141593 attr(,"class") [1] "line3d" "numeric" -- Best regards, Ivan ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel