Функция возвращает именованный вектор без имен - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь написать функцию, которая создает именованный вектор, например:

> x
  a   b   c 
"i" "j" "k" 

Но следующая функция:

getNamedCharacter <- function() {
  x[c("a", "b", "c")] <- c("i", "j", "k")
}

... возвращает вектор без имен:

> x <- getNamedCharacter()
> x
[1] 1 2 3

... в то время как сама строка кода работает как положено:

> x <- NULL
> x[c("a", "b", "c")] <- c("i", "j", "k")
> x
  a   b   c 
"i" "j" "k"

Как я могу получить именованный вектор с именами, используя функцию? Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Мы можем использовать structure. Возможно также добавление атрибутов:

make_named_vec <- function(vec, vec_names){
  structure(vec, names = vec_names)
 }
 make_named_vec(c("i","j","k"), c("a","b","c"))
  a   b   c 
"i" "j" "k"

res <-make_named_vec(c("i","j","k"), c("a","b","c"))
 str(res)
 Named chr [1:3] "i" "j" "k"
 - attr(*, "names")= chr [1:3] "a" "b" "c"
1 голос
/ 03 октября 2019

Вы можете присвоить имена вектору, используя names(vector) <- namesvector:

Функция

getnamedCharacter <- function(vector, names){
  names(vector) <- names
  return(vector)
}

Результат

getnamedCharacter(c("i", "j", "k"), c("a", "b", "c"))

 a   b   c 
"i" "j" "k" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...