Cómo crear un vector R vacío para agregar nuevos elementos


92

Quiero usar R en Python, como lo proporciona el módulo Rpy2. Noto que R tiene []operaciones muy convenientes mediante las cuales puede extraer las columnas o líneas específicas. ¿Cómo podría lograr tal función mediante scripts de Python?

Mi idea es crear un vector R y agregar esos elementos deseados en este vector para que el vector final sea el mismo que en R. Creé un seq(), pero parece que tiene un dígito inicial 1, por lo que el resultado final siempre sería Empiece con el dígito 1, que no es lo que quiero. Entonces, ¿hay una mejor manera de hacer esto?

Respuestas:


95
vec <- vector()

Ver también ayuda de vectores

?vector

56

Preasigno un vector con

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

Luego puede usar [] para insertar valores en él.


Esta es la mejor respuesta si la longitud del vector se conoce desde el principio, ya que será más eficiente en la memoria
stevec

25

Puedes crear un vector vacío como ese

vec <- numeric(0)

Y luego agregue elementos usando c ()

vec <- c(vec, 1:5)

Sin embargo, como dice romunov, es mucho mejor preasignar un vector y luego completarlo (ya que esto evita reasignar una nueva copia de su vector cada vez que agrega elementos)


Me gusta su solución con numérico (), pero mi experiencia me ha llevado a usar NA en lugar de 0 (si usa numérico (2), obtendrá 0 0). Pero esa es mi preferencia personal.
Roman Luštrik

¡¡Muchas gracias!! Pero, ¿es posible liberar el anterior después de agregar un nuevo elemento? ¿Debería simplemente usar rm ()?
ligwin

Hay otro problema de que typeof (numérico (0)) da "double" mientras que los elementos deseados dan "integer", cuando se agregan, se genera un error que dice "El tipo para el nuevo valor no puede ser diferente", ¿cómo convertir?
ligwin

cuando se trabaja en Python, el "as" es una palabra clave, además, Python no tiene tales tipos de datos, así que creo que "as.integer" no funcionará.
ligwin

romunov - numérico (0) significa crear un vector numérico con una longitud de 0 (es decir, sin elementos) no un vector de longitud 1 con ese elemento siendo 0
Aaron Statham

6

Para crear un vector vacío use:

vec <- c();

Tenga en cuenta que no estoy haciendo ninguna suposición sobre el tipo de vector que necesita, por ejemplo, numérico.

Una vez que se ha creado el vector, puede agregarle elementos de la siguiente manera:

Por ejemplo, para agregar el valor numérico 1:

vec <- c(vec, 1);

o, para agregar un valor de cadena "a"

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

4
¿De verdad has probado esto? vec <- c()establece vec en NULL. Si desea un vector vacío, usaría vec <- character(), vec <- numeric()etc.
Matthew Wise

5

Yo tambien he visto

x <- {}

Ahora puede concatenar o enlazar un vector de cualquier dimensión a x

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

2
Esto es exactamente lo mismo que x <- NULL, y no crea nada más que una referencia a ninguna parte.
Joris Meys

3

Como señaló Brani, vector () es una solución, por ejemplo

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

devolverá un vector llamado "newVector" con 50 "0" como valores iniciales. También es bastante común simplemente agregar el nuevo escalar a un vector existente para llegar a un vector expandido, por ejemplo

aVector <- c(aVector, newScalar)


2

En rpy2, la forma de obtener el mismo operador que "[" con R es usar ".rx". Consulte la documentación sobre la extracción con rpy2

Para crear vectores, si conoce Python, no debería haber ningún problema. Consulte la documentación sobre la creación de vectores.


Solía ​​crear una función en Python para este propósito, que es muy complicado y no estoy seguro de cuán ampliamente podría aplicarse. Ahora creo que con estos operadores, la vida podría ser mucho más fácil :)
ligwin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.