• R语言
  • R: 矩阵必须要预定义吗?

定义一个如下的矩阵A:

<br />
for(i in 1:5){<br />
 for(j in 1:5){<br />
   A[i,j]=0.8^(abs(i-j))<br />
 }<br />
}<br />


运行程序出现——错误: 找不到对象'A'

但是,当这样定义,即预先定义A所占空间时:
<br />
A= array(0, dim=c(5,5))<br />
for(i in 1:5){<br />
 for(j in 1:5){<br />
   A[i,j]=0.8^(abs(i-j))<br />
 }<br />
}<br />


运行不会出现错误。

问题:所有的情况都要预先定义空间吗?这个例子好像是必须。求指教。
</p>

是要先定义再赋值,建议赋值时使用NA,可以避免一些不必要的错误。

对于该例可以简单的用如下代码处理:

outer(1:5,1:5,function(i,j) 0.8^abs(i-j))<br />
</p>

不错,版主的方法确实巧妙,学习了

http://cos.name/cn/topic/106486#post-229870

回复 第3楼 的 ming_uld:谢谢[s:13],用outer简单。

回复 第5楼 的 micro@:谢谢潜水大侠,你比版主都让我记忆深刻[s:11]

回复 第5楼 的 micro@:请问:是不是无论预定义的是向量、矩阵、列表等等各种不同的变量,都可以 “A = NULL”一并概括呢, 分配空间都不用担心是吗?A 代表要定义的东西。

回复 第8楼 的 alma2004:You can, but for better performance, it is recommended to pre-allocate the space. E.g., whe you know A is a numeric matrix, it's better to allocate the space as matrix(NA_real_, 500L, 500L) before using it.

回复 第9楼 的 Dexim Corp deleveled proC mixeD:谢谢,还知道了NA还分类型啊[s:11]

24 天 后

回复 第3楼 的 ming_uld:是指循环外不需要预先分配是吗?