2011-05-17 12 views
23

Soy un principiante de R. Al examinar la documentación de R, me encontré con esta frase ?is.vector: "Si mode =" any ", is.vector puede devolver TRUE para los modos atómicos, la lista y la expresión."¿Por qué is.vector() devuelve TRUE para la lista?

Solo tengo curiosidad, ¿por qué? Toda la documentación que he leído indica que las listas y los vectores son dos tipos de datos diferentes. ¿Hay algún concepto más profundo de tipo de datos R que no estoy obteniendo?

+3

Gran pregunta. Bienvenido a SO, @Quant Guy! – Andrie

Respuesta

15

Una lista es (en la mayoría de los casos) en sí misma un vector. De los archivos de ayuda para ?list: "La mayoría de las listas en R internamente son vectores genéricos, mientras que las listas de pares de puntos tradicionales (como en LISP) están disponibles pero rara vez son vistas por los usuarios (excepto como formales de funciones)".

Esto significa que puede utilizar vector comprobar la validez de asignar memoria para una lista:

x <- vector("list", 3) 
class(x) 
[1] "list" 

Ahora asignar un valor al segundo elemento de la lista:

x[[2]] <- 1:5 

x 

[[1]] 
NULL 

[[2]] 
[1] 1 2 3 4 5 

[[3]] 
NULL 

Ver ?list y ?vector para más detalles.

+0

+1 gracias por la excelente explicación y el ejemplo de código –

+0

Esto explica por qué la función devuelve por qué lo hace. No explica por qué el lenguaje es por qué es. Alguien tiene alguna idea sobre eso? – Harlan

11

Consulte la sección R Internal Structures (específicamente la sección 1.1.1) del manual R Internals. Una lista (en el sentido que usted está hablando) es VECSXP, un tipo de vector.

+0

+1, gracias! Parece que tengo algo más que leer. –

+0

@Quant Guy: No necesita aprender las partes internas para usar R, pero es útil si quiere "mirar debajo del capó". –

Cuestiones relacionadas