我在我的程序上使用 R.NET 1.6。
当我尝试运行我的整个脚本时,我收到错误消息“尝试读取或写入受保护的内存。这通常表明其他内存已损坏”source('')
,因此我手动编写了整个代码而不是调用脚本,因为我在某处读到了它是 R.NET 错误之一。这是代码:
engine.Evaluate("U=matrix(ncol=c,nrow=nrow(matdt))");
engine.Evaluate("for(i in 1:nrow(matdt)){for(j in 1:c){U[i,j]=runif(1)}}");
engine.Evaluate("totU=matrix(rowSums(U),ncol=1,nrow=nrow(U))");
engine.Evaluate("for(a in 1:nrow(U)){for(b in 1:ncol(U)){U[a,b]=U[a,b]/totU[a,]}}");
engine.Evaluate("P=0");
engine.Evaluate("iter=1");
engine.Evaluate("repeat{");
engine.Evaluate("V=matrix(ncol=ncol(matdt),nrow=c)");
engine.Evaluate("d=matrix(ncol=ncol(matdt),nrow=nrow(matdt))");
engine.Evaluate("Uk=matrix(ncol=ncol(U),nrow=nrow(U))");
engine.Evaluate("for(g in 1:nrow(U)){for(h in 1:ncol(U)){Uk[g,h]=(U[g,h])^(m)}}"); engine.Evaluate("Uks=matrix(colSums(Uk),ncol=ncol(Uk),nrow=1)");
engine.Evaluate("for(k in 1:c){for(j in 1:nrow(matdt)){d[j,]=Uk[j,k]*matdt[j,]}");
engine.Evaluate("V[k,]=colSums(d)/Uks[,k]}");
engine.Evaluate("dist=matrix(ncol=1,nrow=nrow(matdt))");
engine.Evaluate("alldist=matrix(ncol=c,nrow=nrow(matdt))");
engine.Evaluate("for(l in 1:c){for(n in 1:nrow(matdt)){dist[n,]=t(matdt[n,]-V[l,])%*%(matdt[n,]-V[l,])}");
engine.Evaluate("alldist[,l]=dist}");
engine.Evaluate("ud=matrix(ncol=c,nrow=nrow(matdt))");
engine.Evaluate("for(o in 1:nrow(matdt)){for(p in 1:c){ud[o,p]=alldist[o,p]*Uk[o,p]}}");
engine.Evaluate("Pi=sum(rowSums(ud))");
engine.Evaluate("P=abs(Pi-P)");
engine.Evaluate("alldist2=matrix(ncol=ncol(alldist),nrow=nrow(alldist))");
engine.Evaluate("for(q in 1:nrow(alldist)){for(r in 1:ncol(alldist)){alldist2[q,r]=(alldist[q,r])^((-1)/(m-1))}}");
engine.Evaluate("alldist2[alldist2==Inf] <- 0 ");
engine.Evaluate("totdist=matrix(rowSums(alldist2),ncol=1,nrow=nrow(alldist2))");
engine.Evaluate("for(s in 1:nrow(U)){for(t in 1:ncol(U)){U[s,t]=alldist2[s,t]/totdist[s,]}}");
engine.Evaluate("nilnol<-which(U==0,arr.in=TRUE)");
engine.Evaluate("if(nrow(nilnol)>0){nilnol=matrix(nilnol,ncol=ncol(nilnol))");
engine.Evaluate("for(nn in 1:nrow(nilnol)){"); engine.Evaluate("U[nilnol[nn,1],]=0"); engine.Evaluate("U[nilnol[nn,1],nilnol[nn,2]]=1}}");
engine.Evaluate("iter=iter+1");
engine.Evaluate("if(P<e | iter>mit){break}}");
我在engine.Evaluate("V[k,]=colSums(d)/Uks[,k]}");
说意外 '}'时收到错误消息。这是循环的一部分:
engine.Evaluate("for(k in 1:c){for(j in 1:nrow(matdt)){d[j,]=Uk[j,k]*matdt[j,]}");
engine.Evaluate("V[k,]=colSums(d)/Uks[,k]}");
当我尝试在 R 上运行该代码时,该代码运行良好。此外,如果有人对错误问题有解决方案,我们将不胜感激。