2015-06-21 78 views
13

我有什麼辦法可以避免在R中對矩陣進行原地修改時的修改複製嗎?原地修改R中的矩陣

我想將一個較小的矩陣複製到一個更大的矩陣切片,如下所示。

library(data.table) 
y <- matrix(c(11,21,31,12,22,32),nrow=3,ncol=2) 
address(y) 
[1] "08429190" 

y[2:3,] <- matrix(c(1,1,8,12),nrow=2) 
address(y) 
[1] "0E033D28" 
+2

返回相同的地址在我的comp(和前綴「0x」)。 – jenesaisquoi

+3

當我使用data.table包或pryr包中的'address'嘗試上述命令時,我得到了上述兩個實例的相同地址。建議您嘗試R的較新版本。還請提供包含庫調用的自包含代碼示例。 –

+3

使用'data.table :: address',我得到與OP相同的行爲。 (R 3.2.0,RStudio 0.99.441,Windows 8.0,data.table 1,9,5)。但是,使用R控制檯,我會返回相同的地址。所以,問題出在RStudio上。 – user227710

回答

9

我,使用R 3.2.0在Windows 8.1中RStudio 0.99.441運行並使用pryr::address得到相同的行爲OP。問題是RStudio在其Environment窗格中引用了y。通常情況下,Hadley Wickham有一些很好的文檔。

我不認爲除了不使用RStudio之外,對於全球環境中的矩陣還沒有任何解決方法。我嘗試了其他一些事情。功能內的矩陣很好:

library("pryr") 
fn <- function() { 
    y <- matrix(c(11,21,31,12,22,32),nrow=3,ncol=2) 
    print(address(y)) 
    y[2:3,] <- matrix(c(1,1,8,12),nrow=2) 
    print(address(y)) 
} 

調用fn()應顯示地址不變。

但是,將y作爲全局環境中的列表或環境的成員並不妨礙寫入時的複製(例如x <- new.env(); x$y <- matrix(...))。

Is there any way to disable environment pane in RStudio?似乎沒有任何方法禁用環境窗格。

data.table仍設法避免無意中複製。嘗試:

library("data.table") 
x <- as.data.table(matrix(c(11,21,31,12,22,32),nrow=3,ncol=2)) 
address(x) 
x[2:3, `:=`(V1 = c(1, 1), V2 = c(8, 12))] 
address(x) 
x[, V3 := V1 + V2] 
address(x)