• R语言
  • 全局变量赋值后的报错?

<br />
nRows <<- 10<br />
 adMatrix <<- matrix (round (runif (nRows * nRows)), ncol=nRows)<br />
adMatrix<<-adMatrix * upper.tri(adMatrix, diag=T)<br />
colnames(adMatrix)<<-1:nRows<br />


#Error in colnames(adMatrix) <<- 1:nRows : object 'adMatrix' not found</p>

大家是否也发现同样的报错?什么原因?

没有上下文,无法回答。

你不妨先讲讲<<-是什么意思吧。

回复 第2楼 的 谢益辉:呵呵,这是问题的一部分.

这些代码是从这里copy来的:

http://rcytoscape.systemsbiology.net/versions/current/index.html

这个链接打开之后我没看见代码。请帮忙回答一下我上面的问题先,我想验证一下用户对双箭头的理解。

不好意思,应该是这个连接:

http://rcytoscape.systemsbiology.net/versions/current/cookbook/randomAM/index.html

双箭头没有用过,不过似乎是定义全局变量的?

我的猜想是:用双箭头的有两种人,要么极其清楚它的含义,要么极其不清楚。上面这个网页的作者大概是后者。“全局变量”的理解也是错的,双箭头是向上一层环境中的对象赋值,如果找不到,就再往上一层,如果一直往上都找不到,就到最顶层的环境即全局环境中赋值。

f = function() {<br />
  x = NULL<br />
  g = function() x <<-1<br />
  g()<br />
}<br />
f()<br />
x
</p>

R编程定理7:

未经外层定义的变量在内层用双箭头赋值就是犯罪。

这个网页作者真牛逼全是‘<<-’这个符号。霸气啊!

6 天 后

回复 第6楼 的 谢益辉:多谢!

我现在把所有<<-改为<-之后,程序反而可以正常运行了!

It seems to me a reasonable request to allow colnames(sth)<<- to work, if we believe sth<<- is meaningful.