今天又来打酱油,梅梅子还是不太懂的,不过抄书一流
**
NA与NULL值
用过其他脚本语言的读者也许会知道“查无此物”的值,例如Python中的None和Perl中的 undefined。R有两个类似值:NA和NULL。
在统计数据集,我们经常遇到缺失值,在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的一种特殊对象,它没有模式。
今天有点懒得,明天要开始晨练,睡了睡了