Ho un vettore c(9,6,3,4,2,1,5,7,8)
e voglio passare gli elementi all'indice 2 e all'indice 5 nel vettore. Tuttavia, non voglio dover creare una variabile temporanea e vorrei fare lo switch in una sola chiamata. Come potrei farlo?Scambia due elementi di un vettore in una chiamata
8
A
risposta
9
È possibile utilizzare replace()
.
x <- c(9, 6, 3, 4, 2, 1, 5, 7, 8)
replace(x, c(2, 5), x[c(5, 2)])
# [1] 9 2 3 4 6 1 5 7 8
E se non vuoi nemmeno assegnare x
, è possibile utilizzare
replace(
c(9, 6, 3, 4, 2, 1, 5, 7, 8),
c(2, 5),
c(9, 6, 3, 4, 2, 1, 5, 7, 8)[c(5, 2)]
)
# [1] 9 2 3 4 6 1 5 7 8
ma questo è un po 'sciocco. Probabilmente vorrai che venga assegnato x
all'inizio.
7
Che ne dici di solo x[c(i,j)] <- x[c(j,i)]
? Simile a replace(...)
, ma forse un po 'più semplice.
swtch <- function(x,i,j) {x[c(i,j)] <- x[c(j,i)]; x}
swtch(c(9,6,3,4,2,1,5,7,8) , 2,5)
# [1] 9 2 3 4 6 1 5 7 8
4
Se si desidera effettivamente farlo senza creare una copia temporanea del vettore, è necessario scrivere una breve funzione C.
library(inline)
swap <- cfunction(c(i = "integer", j = "integer", vec="integer"),"
int *v = INTEGER(vec);
int ii = INTEGER(i)[0]-1, jj = INTEGER(j)[0]-1;
int tmp = v[ii];
v[ii] = v[jj];
v[jj] = tmp;
return R_NilValue;
")
vec <- as.integer(c(9,6,3,4,2,1,5,7,8))
swap(2L, 5L, vec)
vec
# [1] 9 2 3 4 6 1 5 7 8
Problemi correlati
- 1. Scambia due lettere in una stringa
- 2. scambia due parole in una stringa php
- 3. Scambia simultaneamente due frammenti
- 4. Scambia due oggetti in JavaScript
- 5. SymPy: Scambia due variabili
- 6. Scambia elementi usando i CSS?
- 7. Scambia due bit con una singola operazione in C?
- 8. Costruzione predefinita di elementi in un vettore
- 9. Moltiplicazione di elementi di una matrice e di un vettore?
- 10. Scambia gli elementi di due sequenze, in modo tale che la differenza delle somme degli elementi sia minima.
- 11. Scambia due interi senza utilizzare una terza variabile
- 12. Come inserire elementi in un vettore?
- 13. In che modo il vettore di due elementi è rappresentato in un OpenCV Mat in Java?
- 14. Sostituire una parte di un vettore con un altro vettore
- 15. Come stampare elementi in un vettore C++
- 16. Trovare più elementi in un vettore
- 17. Rimozione di due elementi in una riga
- 18. Creazione di un vettore da elementi di elenco in R
- 19. Cambia o scambia il CSS di più elementi HTML contemporaneamente
- 20. Inserimento di elementi nel vettore 2D
- 21. R: selezione di elementi corrispondenti ai criteri di un vettore
- 22. generando un vettore di differenza tra due vettori
- 23. Scambia caratteri nella stringa
- 24. elementi non unici disambiguare in un vettore carattere
- 25. Clojure Rimuovi elementi dal vettore in una posizione specificata
- 26. Aggiunta di un vettore per un vettore
- 27. Elementi non copiabili nel vettore
- 28. Trovare gli elementi più comuni in un vettore in R
- 29. inserire elementi nel vettore multidimensionale
- 30. C++: Posso trasmettere un vettore <derived_class> a un vettore <base_class> durante una chiamata di funzione?
nota che 'replace' è solo un wrapper per' x [c (2, 5)] = x [c (5, 2)] '. – MichaelChirico