处理循环中'NULL'的目的是什么?

时间:2015-08-08 20:24:23

标签: r

if (page == contact) {
    return contact form
} elseif (page == about) {
    return about me page
} else {
    return the regular page format.
}

我来到了上面的循环,对于初学者来说这很简单。为了进一步了解第二行的确切目的是什么?对于我的研究,我收集它与重置矢量有关。如果有人可以详细说明,我会非常感激。

3 个答案:

答案 0 :(得分:8)

sqr.squared <- NULL

是在通过循环运行之前初始化空向量sqr.squared的众多方法之一。通常,当已知结果向量的长度时,分配向量的长度要好得多。所以在这里,

sqr.squared <- vector("integer", 50)

会更好的练习。而且速度也快。这样您就不会在循环中构建新向量。但是由于^是矢量化的,你也可以简单地做

sqr[1:50] ^ 2 

并将循环放在一起。

答案 1 :(得分:3)

另一种思考方式是记住r中的所有内容都是函数调用,函数需要输入(通常)。

说你计算了y并希望将该值存储在某处。您可以在不初始化x <- y对象的情况下执行x(r为您执行此操作,与其他语言不同,例如c),但是您要将其存储在x中的特定位置。

请注意,<-(或示例中的=)是一个函数

y <- 1

x[2] <- y
# Error in x[2] <- y : object 'x' not found

这是一个与<-不同的功能。由于您希望将y放在x[2],因此需要[<-

功能
`[<-`(x, 2, y)
# Error: object 'x' not found

但这仍然无效,因为我们需要对象x才能使用此功能,因此请将x初始化为某些内容。

(x <- numeric(5))
# [1] 0 0 0 0 0

# and now use the function
`[<-`(x, 2, y)
# [1] 0 1 0 0 0

这种修复符号对于计算机来说更容易解析(例如+ 1 1)但对人类来说更难(至少我),所以我们更喜欢 修复符号(例如,1 + 1)。 R使这些函数更容易使用x[2] <- y而不是我上面的方法。

答案 2 :(得分:2)

第一个答案是正确的,当您为变量分配NULL值时,目的是初始化一个向量。在许多情况下,当您正在检查数字或使用不同类型的变量时,您需要将此数组,矩阵等设置为NULL。

例如,在您想要创建某种类型的元素时,在某些情况下,您需要在其中放置一些内容。这是使用NULL的目的。此外,有时您需要NA而不是NULL。