R语言中矩阵、向量在内存上的区别

Python015

R语言中矩阵、向量在内存上的区别,第1张

R语言中矩阵、向量在内存上的区别

向量

在初始创建时,系统就给分配了足够的空间,没有赋值的下标对应的值都用NA代替了,所以向量不存在下标超出的限制比如:

>x

[1] 1 2

>length(x)

[1] 2

>x[100]

[1] NA

>length(x)

[1] 2

>x[100]=3

>length(x)

[1] 100

创建x时给了两个数字,所以长度为2。但是取值x[100]时显示的是NA并非下标越界,当赋值x[100]=3时,x的长度变为了100。

这种性质的好处就是可以取代向量的重新赋值语句比如:

>x<- c(x,2)

可以使用以下语句代替:

>x[length(x)+1]=2

这样的好处就是由于不用重新赋值,不需要重新分配内存,因此可以大大提升程序的效率,比如:

>create_vector2<-function(k)

+ {

+ gh=c()

+ for(i in 1:k){

+ gh=c(gh,i)

+ }

+ return(gh)

+ }

>create_vector1<-function(k)

+ {

+ gh=c()

+ gh[1:k]=1:k

+ return(gh)

+ }

以上为两个创建向量的函数,运行时间测量如下:

>system.time(create_vector1(10000)) #创建10000长度的向量,函数1运行时间

用户 系统 流逝

000

>system.time(create_vector2(10000)) #创建10000长度的向量,函数2运行时间

用户 系统 流逝

0.11 0.00 0.11

>system.time(create_vector1(100000)) #创建100000长度的向量,函数1运行时间

用户 系统 流逝

000

>system.time(create_vector2(100000)) #创建100000长度的向量,函数1运行时间

用户 系统 流逝

11.48 0.01 11.71

可以看到函数1明显比函数2快很多。函数1的运行时间基本为0。

矩阵

矩阵并没有这种性质,矩阵的内存空间是初始创建空间的大小。一但确定,只有通过重新赋值来改变。所以会出现下标越界等错误。

因为通过模糊查找到后返回的格式是"句柄|",最大可用下标是1而不是0.

M = Split(Rendering, "|")

分解开后得到的是M(0)和M(1),而M(1)返回的是空值。

如果没有找到,查找命令返回的也是空值,你只需要判断变量Rendering<>"",或者UBound(M)>=0就可以知道窗口是否找到。

1、引用了不存在的数组元素:下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。

2、声明数组时没有指定元素的数目:引用了不存在的集合成员。

3、使用速写形式的下标,结果指定了错误的元素。

4、引用或操作的工作薄、工作表不存在。