Sono stato sconcertato da questo già alcune volte, quindi ecco una domanda inventata per gli altri che potrebbero inciampare sullo stesso problema.sostituzione elemento nel vettore di unità di griglia
Considerate questa unità griglia vettore,
a = unit(1:3, c("cm", "in", "npc"))
voglio sostituire alcuni elementi con i nuovi valori. L'approccio naturale sarebbe,
a[1] = unit(2,"pt")
a
# [1] 2cm 2in 3npc
Qualcosa è andato storto: solo il valore numerico è stato modificato, non l'unità. Perché? Cosa fare?
Modifica: Come indicato in una risposta di seguito, tali unità sono solo vettori numerici con attributi. Tuttavia, la loro progenie unit.arithmetic
e unit.list
deve essere considerata come soluzione per essere completamente generale (ad esempio per regolare le dimensioni dei pannelli degli oggetti ggplot). Considera questo vettore di unità,
(b = a + unit(1, "npc"))
# [1] 1cm+1npc 2in+1npc 3npc+1npc
# [1] "unit.arithmetic" "unit"
Ora sostituire un elemento specifico è più difficile, poiché non sono più atomici.
Tuttavia, ho la sensazione che tu lo sappia già. – LyzandeR
Ero nel mezzo di scrivere una risposta, ma sono rimasto bloccato a un certo punto. Il tuo approccio è corretto, ma temo non del tutto generale, poiché i vettori unitari possono anche contenere elementi più complessi, come l'unità.aritmetica: 'b = a + unità (1," npc ")'. Modificherò la domanda. – baptiste
Posso vedere dove può andare storto con 'unit.arithmetics'. Se dici che il metodo '[<-' sarà difficile da implementare non ho motivo di non crederti. 'unit.list' sembra una buona soluzione tbh. – LyzandeR