系统自学R的第十天#参考书籍《R语言编程艺术》

今天又来打酱油,梅梅子还是不太懂的,不过抄书一流

**

NA与NULL值

用过其他脚本语言的读者也许会知道“查无此物”的值,例如Python中的None和Perl中的 undefined。R有两个类似值:NANULL
在统计数据集,我们经常遇到缺失值,在R中表示为NA。而NULL代表不存在的值而不是存在但未知的值。让我们看看它们在具体情形下是怎么用的。

  • NA的使用

在R的很多统计函数中,我们要求函数跳过缺失值(也就是NA)。如下例所示:

> X<-c(88,NA,12,168,13)
> X
[1]  88  NA  12 168  13
> mean(X)
[1] NA
> mean(X,na.rm=T)
[1] 70.25

在第一个调用中,因为X中有一个缺失值NA,导致mean()无法计算均值。但通过把可选的参数**na.rm(意思为移除NA)**设置为真(T),可以计算其余元素的均值。相比之下,R会自动跳过空值NULL。
下面几个NA值的模式都不一样:

> X<-c(5,NA,12)
> mode(X[1])
[1] "numeric"
> mode(X[2])
[1] "numeric"
> y <- c("abc","def",NA)
> mode(y[2])
[1] "character"
> mode(y[3])
[1] "character"
  • NULL的使用

NULL的一个用法是在循环中创建向量,其中每次迭代都在这个向量上增加一个元素。在这个简单的例子中,我们建立了偶数向量:

# build up a vector of the even numbers in 1:10
> z<- NULL
> for (i in 1:10) if (i %%2 == 0) z<-c(z,i)
> z
[1]  2  4  6  8 10

%%是模运算符(modulooperator),它给出除法运算的余数。例如13除以4的余数是1,即13%%4=1。因此,例子中的循环开始于一个空向量,然后依次向其中添加2、4等元素。
当然,这只是一个人为的例子,并且这里有更好的方法完成这件事。下面是寻找1:10中偶数的另外两种方法:

> seq(2,10,2)
[1]  2  4  6  8 10
> 2*1:5
[1]  2  4  6  8 10

这里关键是为了闸述NA与NULL的区别。如果在前例中使用NA而不是用NULL,则会得到多余的NA:

>Z<- NA
> for (i in 1:10) if (i 8%2== 0) z<- c(z,i)>z
[1] NA 2 4 6 8 10

这里你可以看到,NULL值被作为不存在而计数:

> u <- NULL
> length(u)
[1] 0
> V <- NA
> length(V)
[1] 1

NULL是R的一种特殊对象,它没有模式。

今天有点懒得,明天要开始晨练,睡了睡了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值