【问题标题】:Function returns named vector without names函数返回没有名称的命名向量
【发布时间】:2019-10-03 06:31:21
【问题描述】:

我正在尝试编写一个生成命名向量的函数,例如:

> 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"

如何使用函数获取带有名称的命名向量? 谢谢!

【问题讨论】:

  • 在函数中添加return(x)

标签: r


【解决方案1】:

我们可以使用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"

【讨论】:

  • 谢谢,我要去检查结构()。但是我不提供名称和字符串作为函数参数,都在函数内部。
  • 抱歉,我不在电脑旁。这只是一种替代实现。如果您只想为向量添加属性,请尝试attr。否则我想只使用 return 就足够了。但是,我发现语法有点混乱,并认为明确说明您正在命名可能会更好。有意见。
  • 看起来只是在我的函数中添加'return(x)'就可以解决问题。非常感谢! :)
【解决方案2】:

您可以使用names(vector) &lt;- 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" 

【讨论】:

  • 谢谢。顺便说一句,它不起作用,因为我使用没有参数的函数。只需稍加改动即可工作:函数 getNamedCharacter &lt;- function() { x &lt;- c("i", "j", "k") names(x) &lt;- c("a", "b", "c") return(x) } 结果 &gt; x &lt;- getNamedCharacter() &gt; x a b c "i" "j" "k" 我最感兴趣的是为什么函数会这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 2013-10-14
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
相关资源
最近更新 更多