【问题标题】:Can you create objects with length 0 in R? [duplicate]你能在 R 中创建长度为 0 的对象吗? [复制]
【发布时间】:2017-02-01 02:01:56
【问题描述】:

是否可以在 R 中创建长度为 0 的对象?

【问题讨论】:

  • 有可能吗?是的。你应该这样做吗?通常没有。
  • @NikolasRieble 请不要为此推荐 Stack Overflow。这不是一个好问题,可以通过在互联网上快速搜索来回答。它不会在 SO 受到好评。
  • @Roland 与其在那里提问,不如在那里找到答案。这就是为什么我推荐 SO 作为首先搜索的地方。此外,根据我对交叉验证和 SO 的理解 - 纯编程问题在这里没有一席之地,而是在 SO。
  • @NikolasRieble 推荐 SO 作为搜索位置很好,但这不是您所做的。站点之间存在一种合同。 “我们尽量不向您发送低于标准的问题,您对我们也有同样的礼貌。”
  • x <- NULL 是为任何对象初始化占位符的流行方式。

标签: r


【解决方案1】:

在 R 中为 any 对象初始化占位符的常用方法是

x <- NULL
length(x)
## 0
class(x)
## "NULL"
str(x)
## NULL

典型用法是:

x <- NULL
for (i in 1:10)
  x[i] <- i

x <- NULL
for (i in 1:10)
  x[[i]] <- letters[1:10]

如您所见,R 即时将x 更改为适当的(从它的角度来看..)类。如果如上所述,对象被填充和扩展,所以它的长度只有零,直到你用一些东西填充它。您始终可以声明预定义大小的对象 x &lt;- numeric(10)(从性能的角度来看通常更可取),然后如果您使用少于 10 个值填充它,其余的将填充默认值(numeric 的情况下为零),如果你用超过 10 个值填充它,它将被适当地扩展。

如前所述,您还可以使用预定义的类来初始化对象,例如

x <- list()
x <- vector()
x <- numeric()
x <- data.frame()

等等

但要小心,因为 - 一如既往 - 有例外,例如

x <- matrix()
dim(x)
## [1] 1 1
x
##      [,1]
## [1,]   NA

【讨论】:

  • 拜托,拜托,请至少警告不要在循环中增长对象,并展示如何预分配到最终的对象大小。
  • @Roland 但不是第一个明显的,第二个与问题无关..?
  • 对你来说可能很明显,但对 OP 来说肯定不是。您还展示了如何在循环中增长对象。
  • 主要的一点是,增长对象是使用编程语言可以做的最慢的操作之一。如果您知道要遍历 1:10,您就知道最终大小是 10,并且通常还知道对象的类。因此,您可以轻松地进行预分配,并可能节省数小时到数天的计算时间(我已经看到了这方面的真实示例)。
  • 请记住,许多初学者并不知道潜在的性能问题。不要只是把枪交给他们。他们会朝自己的脚开枪。
【解决方案2】:

当然:

a<-vector()
length(a)

【讨论】:

  • 这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review
  • 问题是“有没有可能……?”答案是“当然”以及如何做到这一点的示例。这怎么不能回答这个问题? (我在问,因为我是 CV 的新手,并且我正在了解 CV 的文化,例如收到答案的方式)。 Ema Nymton 如何给出更好的答案?
  • @Xi'an 我同意尼古拉斯的观点。我不明白这个答案怎么能被描述为没有回答所提出的问题。
  • 好的,然后让我们等到问题本身被删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 2012-10-12
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多