对于java程序员来说,这行很难理解。我认为'< - ',运算符,是一个赋值运算符。但是我怎么能理解内部的子流程呢。 c(5,4)生成具有两个值的向量,然后该值如何传递给dim函数的输入?这个惯例对我来说不熟悉这个。
dim(m) <- c(5,4) # Dimensions set to 5 & 4, so m is now a 5x4 matrix
答案 0 :(得分:2)
这通常被称为&#34;句法糖&#34;。
R的对象在理论上是不可改变的。做类似的事情:
dim(m) = c(4,5)
看起来正在改变m
,但实际上语法树的编写方式如下:
m = D(m, c(4,5))
其中D
是一个从另一个矩阵和一组新维构建矩阵的函数。之前的m
现在可能已用于垃圾收集,名称m
现在指向重新标注的矩阵。
这样的句法糖在R中用于对象似乎变异的大多数地方,例如a[1]=2
,它在语法树中表示为a = B(a,1,2)
,其中B
是构造函数,它从原始a
创建一个向量,但第一个值设置为2。
注意:上述示例中的这些分配函数D
和B
实际上在R中命名为dim<-
和[<-
,我称之为D
和B
为清楚起见,因为<-
的函数名称看起来有点奇怪,但在R
答案 1 :(得分:1)
执行dim(m) <- *
后,您实际上正在调用不同的函数来设置m
的维度。此功能为dim<-
。它等同于以下内容:
m <- `dim<-`(m, c(5, 4))
所以会发生的是返回一个包含您指定尺寸的新矩阵。 R解析器处理将原始语法转换为dim<-
调用的任务。
其他分配操作也会发生同样的情况,例如names(*) <-
,class(*) <-
等。分配给子集时也会发生这种情况,例如m[a, b] <-
:在这种情况下,函数为[<-
。
答案 2 :(得分:0)
你是对的<-
是一个赋值运算符(几乎在所有情况下,它都与=
运算符相同)。
运行时
dim(m) <- c(5, 4)
您实际上是在调用函数
dim<-
此功能甚至还有一个帮助页面?dim<-
。所以
dim(m) <- c(5, 4)
相当于
m <- `dim<-`(m, c(5, 2))
这在R:
中很常见# Vectors
x[1] = 10
## Data frames
df[1, 2] = 50