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:
Requiere la creación de
dummyList
, aunquedummyList
nunca se cambia y está en una lista vacía después de la llamada amapply
.Si el vector numérico,
c(1, 2)
, no se convierte a una lista, entonces el resultado de la llamada amapply
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)