在R中创建一个空的具有命名的数值向量的最短方式是什么?

3

我可以用v <- numeric(0)创建一个空向量,但是这个向量没有名称,只是一个类型为num的向量。当我执行names(v) <- character(0)时,我就得到了一个空的带有名称的数值向量:

> v <- numeric(0)
> names(v) <- character(0)
> str(v)
 Named num(0) 
 - attr(*, "names")= chr(0) 
> v["test"] <- 1
> str(v)
 Named num 1
 - attr(*, "names")= chr "test"

有没有更简单的方法来创建空的命名数值向量?似乎没有像 named(0) 这样的构造函数,或者是我错过了吗?


其实在提交问题之前我已经找到了答案,但是我还是决定去做,并为了你的愉悦而回答它。 - undefined
为什么要创建一个空向量?在迭代方面,R并不像那样工作。 - undefined
2
循环遍历数据,有条件地添加到向量中是你不应该做的事情。我从来没有遇到过一个任务,不能更高效、更优雅地解决。 - undefined
@Roland,你可能比我聪明,但如果有人要求某样东西,请不要质疑需求(除非我问是否有办法避免空向量)。你所做的是陈述(真或假),而不是回答。 - undefined
4
我经常质疑在这里提问的人的需求,通常我这样做是正确的。原因不是因为更聪明,而是因为在R方面更有经验。 - undefined
显示剩余2条评论
1个回答

2

可以从用一条语句创建带名称的数值向量?中得出以下答案:

  1. 使用structure()
  2. 使用setNames()

例如:

> v <- structure(numeric(0), names=character(0))
> str(v)
 Named num(0) 
 - attr(*, "names")= chr(0) 


> v <-setNames(numeric(0), character(0))
> str(v)
 Named num(0) 
 - attr(*, "names")= chr(0) 

1
这似乎没有什么用。为什么一个空向量需要一个名称属性呢?你总是可以在运行时添加名称:x <- numeric(); x["a"] <- 1。但如果你想要进行代码高尔夫,这里有一个选项:c(a=.1)[-1] - undefined
@Roland:在发表这样的评论之前,请将此评论添加到问题中,而不是答案中。 尽管你的“答案”起到了作用,但我无法理解它。如果你的意图是教学,请添加一些背景让我理解你的解决方案。 好的,我明白了:你在向量中创建了一个(名称,值)对,并立即丢弃了该元素(第一个元素)。这很巧妙,但我认为我的答案更直接,即使更长。 - undefined
2
你真的在争论我在哪里留评论吗?我还没有给问题或答案“负面评价”(尚未),然而,以任何方式对帖子进行投票是每个用户的权利。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接