R 跟踪矩阵中的意外更改

R 跟踪矩阵中的意外更改,r,matrix,R,Matrix,我有一个很大的矩阵(9600x9600703.6MB),它在无明显原因的情况下不断变化。创建时,它看起来很好,但在用于计算后,所有值(除少数列外)突然被0替换。这让我有点疯狂,因为我无法调试这个问题。有没有办法追踪是什么导致了这个变量的变化?比如更改或访问日志?或者,是否有方法锁定变量,使其无法修改 非常感谢您的帮助 编辑: 似乎矩阵“L”在应用此等式后被修改,即使它已通过“锁定绑定”锁定: F.calc.E = function(M,p){ M$V1 <- paste(M$V1,M$

我有一个很大的矩阵(9600x9600703.6MB),它在无明显原因的情况下不断变化。创建时,它看起来很好,但在用于计算后,所有值(除少数列外)突然被0替换。这让我有点疯狂,因为我无法调试这个问题。有没有办法追踪是什么导致了这个变量的变化?比如更改或访问日志?或者,是否有方法锁定变量,使其无法修改

非常感谢您的帮助

编辑:

似乎矩阵“L”在应用此等式后被修改,即使它已通过“锁定绑定”锁定:

F.calc.E = function(M,p){
  M$V1 <- paste(M$V1,M$V2,sep = ", ")
  p.loc = grep(pattern = p,x = M$V1) # loc of target pressure
  p.vector = as.numeric(M[p.loc,4:ncol(M),with=FALSE])
  pL = mmult(L,p.vector)
  return(pL)
}
F.calc.E=函数(M,p){

M$V1您可以使用
lockBinding

m <- matrix(1:4, 2)
evil.fun <- function(x) .GlobalEnv[[x]][2,2] <- 0
evil.fun("m")
m
#     [,1] [,2]
#[1,]    1    3
#[2,]    2    0

m <- matrix(1:4, 2)
lockBinding("m", .GlobalEnv)
evil.fun("m")
#Error in .GlobalEnv[[x]][2, 2] <- 0 : 
#  cannot change value of locked binding for 'm'

unlockBinding("m", .GlobalEnv)

m您可以使用
lockBinding

m <- matrix(1:4, 2)
evil.fun <- function(x) .GlobalEnv[[x]][2,2] <- 0
evil.fun("m")
m
#     [,1] [,2]
#[1,]    1    3
#[2,]    2    0

m <- matrix(1:4, 2)
lockBinding("m", .GlobalEnv)
evil.fun("m")
#Error in .GlobalEnv[[x]][2, 2] <- 0 : 
#  cannot change value of locked binding for 'm'

unlockBinding("m", .GlobalEnv)

m我的建议是保留一份矩阵原始状态的副本。然后在每次计算后,将矩阵与副本进行比较-这将帮助您确定其变化的点。@JamesElderfield我认为这对于703.6 Mb的矩阵不够可行。如果您需要其他帮助,请发布您的代码:示例(较小)矩阵以及计算。如果不能够复制问题,则无法诊断问题。@KunalPuri设置为0的列总是相同的吗?只需检查其中一列(或一小部分)反对副本。@我的建议是保留一份矩阵原始状态的副本。然后在每次计算后,将矩阵与副本进行比较-这将有助于您确定其变化点。@JamesElderfield如果您需要其他帮助,我认为对于703.6 Mb的矩阵来说,这是不可行的,发布您的代码:一个示例(较小)矩阵和计算。如果不能够复制它,就无法诊断您的问题。@KunalPuri设置为0的列总是相同的吗?只需检查其中一列(或一小部分)反对副本。@我请看编辑谢谢提示,它不起作用,但我不知道这个函数。请看编辑。变量即使在被锁定后仍会不断更改。
numerimatrix mmult(const MultuCimultM.,…<代码> >或使用<代码>克隆< /COD>。尝试“const”但不工作。尝试“克隆”,但我不能使它工作,因为我完全不熟悉C++的编写…谢谢提示,它不起作用,但我不知道这个函数。请参阅编辑。变量即使在被锁定之后也会继续变化。<代码>努姆ErimMatxMult(const MultuxMatm M,…<代码>或使用<代码>克隆< /COD>。尝试“const”但不工作。尝试“克隆”,但我不能使它工作,因为我完全不熟悉C++编写…