Już kilka razy zdumiewało mnie to, więc oto gotowe pytanie dla innych, którzy mogą natknąć się na ten sam problem.Wymiana elementu w jednostce sieci wektorowej
Rozważmy tę jednostkę siatka wektor,
a = unit(1:3, c("cm", "in", "npc"))
Chcę wymienić niektóre elementy z nowymi wartościami. Naturalne podejście byłoby,
a[1] = unit(2,"pt")
a
# [1] 2cm 2in 3npc
Coś poszło nie tak: zmieniono tylko wartość liczbową, a nie jednostkę. Czemu? Co robić?
Edytuj: Jak wskazano w jednej odpowiedzi poniżej, takie jednostki są po prostu wektorami liczbowymi z atrybutami. Jednak ich potomstwo: unit.arithmetic
i unit.list
powinno być również uważane za rozwiązanie w pełni ogólne (np. W celu dostosowania rozmiarów paneli obiektów ggplot). Rozważ ten wektor jednostkowy,
(b = a + unit(1, "npc"))
# [1] 1cm+1npc 2in+1npc 3npc+1npc
# [1] "unit.arithmetic" "unit"
Teraz zastąpienie konkretnego elementu jest trudniejsze, ponieważ nie jest już atomowe.
Jednak mam wrażenie, że już to wiesz. – LyzandeR
Byłem w trakcie pisania odpowiedzi, ale utknąłem w pewnym momencie. Twoje podejście jest poprawne, ale obawiam się, że nie jest ono całkowicie ogólne, ponieważ wektory jednostkowe mogą również zawierać bardziej złożone elementy, takie jak unit.arithmetic: 'b = a + unit (1," npc ")'. Będę edytować pytanie. – baptiste
Widzę, gdzie może pójść nie tak z 'unit.arithmetics'. Jeśli powiesz, że metoda [<-' będzie trudna do wdrożenia, nie mam powodu, aby ci nie wierzyć. 'unit.list' wygląda na wystarczająco dobre rozwiązanie tbh. – LyzandeR