我正试图理解课本上的一个例子。
示例代码如下:
x <- cbind(x1,x2,x3)
z <- NULL
y <- rbind(z,x)
我的问题是,当输出看起来和x
一样时,为什么它是rbind
到Null
?
这个例子可能是为了说明rbind()
将对象设为NULL只返回非NULL对象。如果您的代码可能返回或不返回data.frame/matrix/vector(否则返回NULL(,则可以使用此功能。您展示的案例相当琐碎,但请考虑以下示例:
results <- lapply(1:4, function(i) {
if (i %% 2 == 0) {
return(data.frame(a = i, b = i / 2))
} else {
return(NULL)
}
})
# a list of mixed results (some may be NULL)
results
#> [[1]]
#> NULL
#>
#> [[2]]
#> a b
#> 1 2 1
#>
#> [[3]]
#> NULL
#>
#> [[4]]
#> a b
#> 1 4 2
# get a data.frame of just the non-NULL rows
do.call('rbind', results)
#> a b
#> 1 2 1
#> 2 4 2
在这里,我们将迭代地将rbind()
应用于对lapply()
的调用所产生的列表中的每个元素。
我们应用的函数是任意的,但它有一些内部逻辑,导致data.frame结果,但在其他情况下返回NULL。例如,考虑API请求可能会返回数据,也可能不会返回数据,或者如果您未连接到互联网,则可能会成功,也可能不成功。
由于具有NULL的对象的rbind()
只返回原始对象,因此对于不满足条件的情况,不需要额外处理或返回伪值。