對於java程序員要理解的我來說,這條線非常困難。我認爲'< - '是運營商,是一個分配運營商。但是我怎麼能理解內部的子流程。 c(5,4)使向量具有兩個值,然後該值如何傳遞給dim函數的輸入?這個慣例對我來說不熟悉這一點。dim()函數的約定插入參數
dim(m) <- c(5,4) # Dimensions set to 5 & 4, so m is now a 5x4 matrix
對於java程序員要理解的我來說,這條線非常困難。我認爲'< - '是運營商,是一個分配運營商。但是我怎麼能理解內部的子流程。 c(5,4)使向量具有兩個值,然後該值如何傳遞給dim函數的輸入?這個慣例對我來說不熟悉這一點。dim()函數的約定插入參數
dim(m) <- c(5,4) # Dimensions set to 5 & 4, so m is now a 5x4 matrix
這通常被稱爲「語法糖」。
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中完全可以接受的標識符
你是正確的<-
是賦值運算符(在幾乎所有情況下,這是一樣的=
運營商)。
當您運行
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
因此..您的意思是操作員不僅將值分配給左側的值,還將參數分配給左側的功能? – verystrongjoe
如果我理解你的評論,是的 – csgillespie
當你做dim(m) <- *
,你實際上調用不同功能設置尺寸爲m
。該功能是dim<-
。它相當於以下內容:
m <- `dim<-`(m, c(5, 4))
所以會發生什麼是一個新矩陣返回您指定的尺寸。 R解析器處理將原始語法轉換爲dim<-
的任務。
其他分配操作(例如names(*) <-
,class(*) <-
等)也會發生同樣的情況。當您分配給子集時也會發生這種情況,如m[a, b] <-
:在這種情況下,該功能是[<-
。
雖然你所說的每一個'* < - '函數都是正確的,'[<-'函數的處理方式是不同的(至少在最近的R版本中),並且可能實際上改變了對象*引用*。嘗試使用'require(data.table); a <-1:10;地址(a); a [7L] < - 11L;地址(a)',並且地址在替換之前和之後通常是相同的。 – nicola
@nicola在[< - 什麼[是什麼意思? – verystrongjoe
我試過這個實例。但我嘗試了很多次。但都一樣 – verystrongjoe