Jedną z cech R, która jest związana z wrodzoną naturą wektoryzacji, jest reguła recyklingu opisana w An Introduction to R w sekcji 2.2.Wdrożenie standardowych zasad recyklingu
Wektory występujące w tym samym wyrażeniu nie muszą mieć tej samej długości. Jeśli nie, wartość wyrażenia jest wektorem o tej samej długości, co najdłuższy wektor występujący w wyrażeniu. Krótsze wektory w wyrażeniu są poddawane recyklingowi tak często, jak to jest konieczne (być może ułamkowo), aż dopasują długość najdłuższego wektora. W szczególności stała jest po prostu powtarzana.
Większość standardowych funkcji korzysta z tego, ale kod, który to robi, jest ukryty w ukrytym kodzie C.
Czy istnieje kanoniczny sposób wdrożenia standardowych zasad recyklingu dla funkcji całkowicie w kodzie R? Oznacza to, że biorąc pod uwagę funkcję jak
mock <- function(a, b, c) {
# turn a, b, and c into appropriate recycled versions
# do something with recycled a, b, and c in some appropriately vectorized way
}
gdzie a
, b
, a c
są wektorami, ewentualnie o różnych długościach i nieznanych typów/klas, czy istnieje kanoniczny sposób, aby uzyskać nowy zestaw wektorów, które są poddawane recyklingowi zgodnie do standardowych zasad recyklingu? W szczególności nie mogę zakładać, że krok "zrób coś" sam dokona właściwego recyklingu, więc muszę to zrobić sam wcześniej.
+1 Nasze idee są zasadniczo identyczne, ale wykonujesz lepszą robotę sprowadzając je do sedna. (Patrząc na twoją odpowiedź, teraz zdaję sobie sprawę, że Trochę mnie to poruszyło przy konstruowaniu tego przykładu danych.frame!) –
kiedy napisałem twoją oryginalną odpowiedź była całkiem inna, są teraz praktycznie identyczne oprócz nazw. – baptiste
Tak, widzę, że zasadniczo podobne wersje trafiają w Kilka minut w stosunku do siebie, ale zwartość Twojej funkcji sprawia, że jest ona bardziej przenośna dwójka. –