R dim()函数';s插入参数的约定

R dim()函数';s插入参数的约定,r,R,这一行对我这个java程序员来说真的很难理解。我认为,“当你做dim(m)时,你是正确的,这通常被称为“语法糖” R的对象在理论上是不变的。做一些类似于: dim(m) = c(4,5) 看起来它正在改变m,但实际上语法树是这样写的: m = D(m, c(4,5)) 其中D是一个函数,它从另一个矩阵和一组新的维度构造一个矩阵。前面的m现在可能要进行垃圾收集,名称m现在指向重新标注的矩阵 在对象似乎发生变化的大多数地方,例如a[1]=2,在语法树中表示为a=B(a,1,2),其中B是从原始

这一行对我这个java程序员来说真的很难理解。我认为,“当你做
dim(m)时,你是正确的
,这通常被称为“语法糖”

R的对象在理论上是不变的。做一些类似于:

 dim(m) = c(4,5)
看起来它正在改变
m
,但实际上语法树是这样写的:

m = D(m, c(4,5))
其中
D
是一个函数,它从另一个矩阵和一组新的维度构造一个矩阵。前面的
m
现在可能要进行垃圾收集,名称
m
现在指向重新标注的矩阵

在对象似乎发生变化的大多数地方,例如
a[1]=2
,在语法树中表示为
a=B(a,1,2)
,其中
B
是从原始
a
创建向量的构造函数,但第一个值设置为2


注:上述示例中的这些赋值函数,
D
B
实际上被命名为
dimso。。你的意思是运算符不仅要将值分配给左边的值,还要将参数分配给左边的函数?如果我理解你的评论,是的,而你所说的通常对左边的每个
*@nicola都是正确的[我尝试了这个实例。但我尝试了很多次。但都是一样的。事实上,许多内置函数都避免在可能的情况下复制对象,同时仍然保持复制的错觉。在@nicola示例中,绑定到“a”的对象不绑定到任何其他对象,因此可以安全地在适当的位置进行更改(没有人会注意到-除了“data.table::address”函数之外,该函数除了用于低级调试外,不应用于任何其他用途)。
dim<-
dim(m) <- c(5, 4)
m <- `dim<-`(m, c(5, 2))
# Vectors
x[1] = 10
## Data frames
df[1, 2] = 50
m <- `dim<-`(m, c(5, 4))
 dim(m) = c(4,5)
m = D(m, c(4,5))