2011-01-24 5 views
8

Soy nuevo en la programación R. Después de revisar algunos tutoriales, recogí la mayoría de las cosas que necesitaba, pero aún falta una cosa: el mapa de la estructura de datos.¿Tiene R 'dict' como en python o 'map' como en C++ do?

¿Todos saben si R tiene dict? ¿En qué puedo almacenar pares (clave, valor)?

Gracias!

+1

Te estás confundiendo los términos de Python con C++. * 'dict' * es la estructura de datos que almacena pares (clave, valor). * 'map (somefn, someseq)' * es una función que aplica * 'somefn' * a cada elemento en *' someseq' *. – smci

Respuesta

8

Sí lo hace y se llama list.

> x <- list(a=1, b="foo", c=c(1,1,2,3,5)) 
> x 
$a 
[1] 1 

$b 
[1] "foo" 

$c 
[1] 1 1 2 3 5 

En Python se llama dict, por lo que vale la pena.

+2

También hay una función 'pairlist' –

3

No es el paquete de hash ..

+0

La clase de hash proporcionada en los paquetes hash envuelve un entorno hash que proporciona más métodos, pero también agrega un poco a la sobrecarga. –

5

entornos son también un candidato, y en muchos casos la mejor opción.

e<-new.env(hash=T) 
e$a<-1 
e$b<-2 

R> e$a 
[1] 1 

La desventaja de una lista es que es una búsqueda lineal.

+1

¿Un entorno utiliza algo mejor que la búsqueda lineal? ¿Y cuántos miembros necesita antes de que el rendimiento de búsqueda lineal se vuelva problemático, en su experiencia? –

+1

http://broadcast.oreilly.com/2010/03/lookup-performance-in-r.html ofrece una visión general rápida. En resumen, si está buscando por matrices de índice, es el camino a seguir, pero si va por etiquetas, los entornos de hash son mejores. No hay nada más pequeño que 1024, pero incluso entonces los entornos son mejores para la búsqueda de etiquetas. Es probable que si tiene una pequeña tabla de búsqueda el vector sería mejor. –

2

Dado que los elementos de matriz/vector se pueden nombrar, se obtienen algunas de las propiedades de un mapa/diccionario incorporado.

x <- c(apple = 1, banana = 99, "oranges and lemons" = 33) 
x["apple"] 
x[c("bananas", "oranges and lemons")] 
x[x == 99] 

(Si sus valores son de diferentes tipos, entonces es necesario utilizar un list en lugar de un vector.)

0

El paquete de hash como se mencionó anteriormente se le añade un poco de retroproyector, pero proporciona una solución flexible, intuitiva métodos para acceder al mapa/hash/diccionario. Debería ser muy fácil para los usuarios de otro idioma asimilarlo.

Una lista es la mejor solución si la lista tiene una pequeña cantidad de elementos. (< 200 o más).

Un entorno es mejor para usar si no puede tolerar un poco de sobrecarga Y no desea los métodos flexibles e intuitivos.

El paquete de hash es el mejor en la mayoría de las situaciones.

C-

Cuestiones relacionadas