R dim()函数';s插入参数的约定
这一行对我这个java程序员来说真的很难理解。我认为,“当你做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是从原始
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))