Come creare un vettore R vuoto per aggiungere nuovi elementi


92

Voglio usare R in Python, come fornito dal modulo Rpy2. Ho notato che R ha []operazioni molto convenienti con cui puoi estrarre le colonne o le righe specifiche. Come posso ottenere una tale funzione dagli script Python?

La mia idea è di creare un vettore R e aggiungere gli elementi desiderati in questo vettore in modo che il vettore finale sia lo stesso di R. Ho creato un seq(), ma sembra che abbia una cifra iniziale 1, quindi il risultato finale sarebbe sempre inizia con la cifra 1, che non è quello che voglio. Quindi, c'è un modo migliore per farlo?

Risposte:


95
vec <- vector()

Vedi anche la guida ai vettori

?vector

56

Assegno un vettore con

> (a <- rep(NA, 10))
 [1] NA NA NA NA NA NA NA NA NA NA

È quindi possibile utilizzare [] per inserire valori al suo interno.


Questa è la risposta migliore se la lunghezza del vettore è nota fin dall'inizio, poiché sarà più efficiente in termini di memoria
stevec

25

Puoi creare un vettore vuoto in questo modo

vec <- numeric(0)

E poi aggiungi elementi usando c ()

vec <- c(vec, 1:5)

Tuttavia, come dice romunov, è molto meglio pre-allocare un vettore e poi popolarlo (poiché questo evita di riallocare una nuova copia del tuo vettore ogni volta che aggiungi elementi)


Mi piace la tua soluzione con numeric (), ma la mia esperienza mi ha portato a usare NA invece di 0 (se usi numeric (2), otterrai 0 0). Ma questa è la mia preferenza personale.
Roman Luštrik

Grazie molto!! Ma è possibile liberare il precedente dopo l'aggiunta di un nuovo elemento? dovrei semplicemente usare rm ()?
ligwin

C'è un altro problema che typeof (numeric (0)) dà "double" mentre gli elementi ricercati danno "integer", quando aggiunti, è stato sollevato un errore dicendo "Il tipo per il nuovo valore non può essere diverso", come convertire?
ligwin

quando si lavora in python, "as" è una parola chiave, inoltre, python non ha tali tipi di dati, quindi penso che "as.integer" non funzionerà?
ligwin

romunov - numerico (0) significa creare un vettore numerico con lunghezza 0 (cioè nessun elemento) non un vettore di lunghezza 1 con quell'elemento 0
Aaron Statham

6

Per creare un vettore vuoto usa:

vec <- c();

Si prega di notare che non sto facendo alcuna ipotesi sul tipo di vettore richiesto, ad esempio numerico.

Una volta che il vettore è stato creato, puoi aggiungervi elementi come segue:

Ad esempio, per aggiungere il valore numerico 1:

vec <- c(vec, 1);

oppure, per aggiungere un valore stringa "a"

vec <- c(vec, "a");

4
Hai davvero provato questo? vec <- c()imposta vec su NULL. Se vuoi un vettore vuoto dovresti usare vec <- character(), vec <- numeric()ecc.
Matthew Wise

5

Ho anche visto

x <- {}

Ora puoi concatenare o associare un vettore di qualsiasi dimensione a x

rbind(x, 1:10)
cbind(x, 1:10)
c(x, 10)

2
Questo è esattamente lo stesso di x <- NULLe non crea nient'altro che un riferimento al nulla.
Joris Meys

3

Come sottolineato da Brani, vector () è una soluzione, ad es

newVector <- vector(mode = "numeric", length = 50)

restituirà un vettore denominato "newVector" con 50 "0" come valori iniziali. È anche abbastanza comune aggiungere semplicemente il nuovo scalare a un vettore esistente per arrivare a un vettore espanso, ad es

aVector <- c(aVector, newScalar)


2

In rpy2, il modo per ottenere lo stesso operatore di "[" con R è usare ".rx". Consulta la documentazione sull'estrazione con rpy2

Per la creazione di vettori, se sai come muoverti con Python non dovrebbero esserci problemi. Consulta la documentazione sulla creazione di vettori


Ho usato per creare una funzione in python per questo scopo, che è molto complicato e non sono sicuro di quanto ampiamente potrebbe essere applicato. Ora penso che con questi operatori, la vita potrebbe essere molto più facile :)
ligwin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.