vacio - sustituir na por 0 en r
¿Crear un vector numérico con nombres en una declaración? (6)
... como nota al margen, la función de structure
permite establecer TODOS los atributos, no solo los nombres:
structure(1:10, names=letters[1:10], foo="bar", class="myclass")
Lo que produciría
a b c d e f g h i j
1 2 3 4 5 6 7 8 9 10
attr(,"foo")
[1] "bar"
attr(,"class")
[1] "myclass"
Estoy tratando de establecer el valor predeterminado para un parámetro de función en un nombre numérico. ¿Hay una manera de crear uno en una sola declaración? He comprobado? Numérico y? Vector pero no lo parece. ¿Tal vez pueda convertir / forzar una matriz o un cuadro de datos y lograr el mismo resultado en una declaración? Para ser claro, estoy tratando de hacer lo siguiente en una sola toma:
test = c( 1 , 2 )
names( test ) = c( "A" , "B" )
La convención para nombrar elementos vectoriales es la misma que con las listas:
newfunc <- function(A=1, B=2) { body} # the parameters are an ''alist'' with two items
Si, por el contrario, desea que este sea un parámetro que se denominó un vector (el tipo de función que manejaría los argumentos proporcionados por la apply
):
newfunc <- function(params =c(A=1, B=2) ) { body} # a vector wtih two elements
Si, en cambio, quisiera que este fuera un parámetro que fuera una lista con nombre:
newfunc <- function(params =list(A=1, B=2) ) { body}
# a single parameter (with two elements in a list structure
La función setNames()
está hecha para este propósito. Como se describe en Advanced R y ?setNames
:
test <- setNames(c(1, 2), c("A", "B"))
Magrittr ofrece una solución agradable y limpia.
result = c(1,2) %>% set_names(c("A", "B"))
print(result)
A B
1 2
También puedes usarlo para transformar data.frames en vectores.
df = data.frame(value=1:10, label=letters[1:10])
vec = extract2(df, ''value'') %>% set_names(df$label)
vec
a b c d e f g h i j
1 2 3 4 5 6 7 8 9 10
df
value label
1 1 a
2 2 b
3 3 c
4 4 d
5 5 e
6 6 f
7 7 g
8 8 h
9 9 i
10 10 j
Para ampliar la respuesta de @joran (no pude hacer que se formatee correctamente como un comentario): si el vector nombrado se asigna a una variable, se accede a los valores de A y B a través de un subconjunto mediante la función [
. Use los nombres para subcontratar el vector de la misma manera que podría usar el número de índice para subconjuntar:
my_vector = c(A = 1, B = 2)
my_vector["A"] # subset by name
# A
# 1
my_vector[1] # subset by index
# A
# 1
Qué tal si:
c(A = 1, B = 2)
A B
1 2