vectores vacio seleccionar que listas leer filas eliminar data crear contar columnas r list constructor lapply named

vacio - Creando una lista nombrada a partir de dos vectores(nombres, valores)



seleccionar columnas en r (2)

¿Hay una manera de usar mapply en dos vectores para construir una lista nombrada? El primer vector sería de tipo character y contendría los nombres utilizados para la lista, mientras que el segundo contiene los valores.

Hasta ahora, la única solución que tengo es:

> dummyList = list() > addToList <- function(name, value) { + dummyList[[name]] <- value + } > mapply(addToList, c("foo", "bar"), as.list(c(1, 2)) $foo `1` $bar `2`

Esto parece una solución bastante artificial, pero no puedo imaginar cómo hacerlo de otra manera. Los problemas que tengo con él son:

  1. Requiere la creación de dummyList , aunque dummyList nunca se cambia y está en una lista vacía después de la llamada a mapply .

  2. Si el vector numérico, c(1, 2) , no se convierte a una lista, entonces el resultado de la llamada a mapply es un vector nombrado de dobles.

Para solucionar el problema 2, siempre puedo llamar a mapply en dos vectores y luego llamar a as.list en el resultado, pero parece que debería haber una manera de crear directamente una lista con los valores en un vector.


Comparto el desconcierto de Ben sobre por qué querría hacer esto y su recomendación.

Solo por curiosidad, hay una especie de característica "oculta" en mapply que permitirá esto:

x <- letters[1:2] y <- 1:2 mapply(function(x,y) { y }, x, y, SIMPLIFY = FALSE,USE.NAMES = TRUE) $a [1] 1 $b [1] 2

Notando que la documentación para USE.NAMES dice:

USE.NAMES lógico; use nombres si el primer ... argumento tiene nombres, o si es un vector de caracteres, use ese vector de caracteres como nombres.


Puedes usar setNames()

setNames(as.list(c(1, 2)), c("foo", "bar"))

(para una lista) o

setNames(c(1, 2), c("foo", "bar"))

(para un vector)