Подтвердить что ты не робот

Создать числовой вектор с именами в одном выражении?

Я пытаюсь установить значение по умолчанию для параметра функции на именованный номер. Есть ли способ создать его в одном заявлении? Я проверил? Числовой и? Вектор, но это не так. Возможно, я могу преобразовать/принудить матрицу или data.frame и добиться того же результата в одном выражении? Чтобы быть ясным, я пытаюсь сделать следующее за один выстрел:

test = c( 1 , 2 )
names( test ) = c( "A" , "B" )
4b9b3361

Ответ 1

Соглашение об именовании векторных элементов такое же, как со списками:

newfunc <- function(A=1, B=2) { body}  # the parameters are an 'alist' with two items

Если бы вы хотели, чтобы это был параметр, который был именованным вектором (вид функции, которая обрабатывала бы аргументы, предоставленные apply):

newfunc <- function(params =c(A=1, B=2) ) { body} # a vector wtih two elements

Если вместо этого вы хотите, чтобы это был параметр, который был именованным списком:

newfunc <- function(params =list(A=1, B=2) ) { body} 
    # a single parameter (with two elements in a list structure

Ответ 2

... как побочная заметка, функция structure позволяет вам устанавливать ВСЕ атрибуты, а не только имена:

structure(1:10, names=letters[1:10], foo="bar", class="myclass")

Что создаст

 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"

Ответ 3

Для этой цели создана функция setNames(). Как описано в Advanced R и ?setNames:

test <- setNames(c(1, 2), c("A", "B"))

Ответ 4

Как насчет:

 c(A = 1, B = 2)
A B 
1 2 

Ответ 5

magrittr предлагает хорошее и чистое решение.

result = c(1,2) %>% set_names(c("A", "B"))
print(result)
A B 
1 2

Вы также можете использовать его для преобразования data.frames в векторы.

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