NA与NULL的区别
a <- c(1, 2, NA)
b <- c(1, 2, NULL)
sum(a)
#> NA
sum(a, na.rm = T)
#> 3
sum(b)
#> 3
最终结果表明,NA值如果在不添加na.rm=TRUE
的情况下会使得我们的运算结果成为NA,而NULL不会影响我们的计算结果。之所以出现这样的结果是因为:NA表示数据集中的该数据遗失。而NULL表示不存在的值。
subset()与直接索引的区别
接上文:
a[a > 1]
#> 2 NA
subset(a, a > 1)
#> 2
b[b > 1]
#> 2
subset(b, b > 1)
#> 2
差别在于,只要有NA的存在,无论怎么直接索引,NA值都会出现在结果当中,此时解决办法可以尝试使用subset()
函数。
善用all()与any()函数
a <- c(3, 4, 5, 6)
all(a > 1)
#等效于:sum(a > 1) == length(a)
any(a > 5)
#等效于:sum(a > 5) != 0
这两个小函数可以帮助我们“笼统”判断一个向量中元素的情况,可以替代我们平时所写的sum()
语句。
矩阵与向量的混合运算
a <- matrix(1:4, ncol = 2)
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
a + 1:4
# [,1] [,2]
#[1,] 2 6
#[2,] 4 8
实际上,矩阵也可以被理解为一个向量,当矩阵与向量进行运算时,向量会自动变成按列进行储存的矩阵了。
向量输入,矩阵输出
背景很简单,当我们对向量进行了某种操作后,最终输出的结果我们想以矩阵的形式进行展示,也就是每个元素及其对应的运算结果处在矩阵的一行或者一列之中:
a <- 1:4
fun <- function(x) return(c(x, x^2))
matrix(fun(a), ncol = 2)
# [,1] [,2]
#[1,] 1 1
#[2,] 2 4
#[3,] 3 9
#[4,] 4 16
sapply(a, FUN = fun)
# [,1] [,2] [,3] [,4]
#[1,] 1 2 3 4
#[2,] 1 4 9 16
使用sapply()
函数就达到了我们的目的,区别只是在于需要转置(t()
)一下就可以了。
网友评论