Podaj funkcję names
: jest to prymitywna funkcja w R. Dla funkcji pierwotnych tworzony jest niejawny rodzajowy S4, więc możliwe jest skonstruowanie metod S4 dla tej funkcji.Dodaj dodatkowe argumenty do niejawnego generatora S4 dla funkcji pierwotnej.
Take klasy S4 zdefiniowane następująco:
setClass("aClass",
representation=list(
values = "character",
id = "numeric"
),
prototype=list(
values = character(0),
id = numeric(0)),
validity=function(object){
length([email protected])==length([email protected])
}
)
Teraz chcę utworzyć funkcję, aby wyodrębnić nazwy, albo posortowane lub nieposortowane. Chciałem to zrobić za pomocą funkcji names
, aby uniknąć konieczności tworzenia nowej funkcji, ponieważ jest to mniej intuicyjne.
Poniższa daje wyobrażenie o tym, co należy zrobić:
setMethod("names",signature="aClass",
function(x,ordered=TRUE){
if(ordered)
[email protected][[email protected]]
else
[email protected]
}
to nie będzie działać, jak names
jest prymitywne i ordered
funkcja nie jest argumentem za domniemane rodzajowy.
Jak mogę dokonać tej pracy w następujących warunkach:
- funkcja
names
powinny zachować swój pierwotny zachowanie dla wszystkich innych obiektów, w tym obiektów z innymi pakietami. - kod powinien być dopuszczalny do użytku w pakiecie
- kod powinien być akceptowalny przez wysokie standardy określone np. Przez Bioconductor.
Dziękuję za odpowiedź, ale właśnie to powiedziałem na moje pytanie: nie mogę użyć dodatkowego argumentu. Indeksy liczbowe odnoszą się do uporządkowanych nazw i zestawu innych szczelin (rzeczywisty obiekt jest o wiele bardziej złożony i nie można zamówić wszystkich szczelin). Używam dodatkowego gniazda do wskazania, czy obiekt został zamówiony, czy nie. Mam długą drogę do "uporządkowania" uporządkowanych nazw. Miałem jednak nadzieję, że uda mi się to zrobić bez hackowania. Globalna zmienna pakietowa to rodzaj hackowania, którego nawet nie rozważałbym jako ważnej opcji. :) –
Tak, z twojego pytania wydawało się, że wiesz, że odpowiedź brzmi "nie", ale ponieważ zadałeś to pytanie, odpowiedziałem;) –
Miałem nadzieję, że jest jakiś sposób, o którym nie wiedziałem, ale obawiam się, że " Będę musiał zadowolić się "nie" :) Daje mi to jeszcze kilka dni, a następnie masz zaakceptowaną odpowiedź. –