R语言中的那些小细节【一】

2022-06-22  本文已影响0人  Bio_Infor
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())一下就可以了。

上一篇 下一篇

猜你喜欢

热点阅读