Próbuję napisać metodę rbind
dla konkretnej klasy. Oto prosty przykład, w którym to nie działa (przynajmniej dla mnie):S3 wysyłanie `rbind` i` cbind`
rbind.character <- function(...) {
do.call("paste", list(...))
}
Po wprowadzeniu tej funkcji, to pozornie może potwierdzić, że jest to ważna metoda R wie o:
> methods("rbind")
[1] rbind.character rbind.data.frame rbind.rootogram* rbind.zoo*
see '?methods' for accessing help and source code
jednak nie są ujmowane, gdy próbuję go użyć:
> rbind("abc", "xyz")
[,1]
[1,] "abc"
[2,] "xyz"
> #### compared with ####
> rbind.character("abc", "xyz")
[1] "abc xyz"
strona help mówi, że wysyłka odbywa się wewnętrznie w sposób następujący:
- Dla każdego argumentu otrzymujemy listę możliwych przynależności do klasy od atrybutu klasy.
- Sprawdzamy każdą klasę po kolei, aby sprawdzić, czy istnieje stosowna metoda .
- Jeśli znajdziemy odpowiednią metodę, upewnimy się, że jest ona identyczna z dowolną metodą określoną dla poprzednich argumentów. Jeśli jest identyczny, kontynuujemy, kontynuujemy, w przeciwnym razie natychmiast przechodzimy do domyślnego kodu.
Dzięki rbind("abc", "xyz")
uważam, że wszystkie te kryteria są spełnione. Co daje i jak mogę to naprawić?
Zobacz '? InternalMethods', a także coś podobnego do' x = "abc"; y = "xyz"; is.object (x) || is.object (y); rbind (x, y); attr (x, "class") = "character"; attr (y, "class") = "character"; is.object (x) || is.object (y); rbind (x, y) ' –