【发布时间】:2014-09-18 06:26:33
【问题描述】:
我有以下难题。以下代码从向量池中获取一个向量,将向量绑定到矩阵,并对新矩阵执行函数并返回一个标量结果。
In2 <- diag(nXtr+1)
mu <- array(1,c(dim(Xcal)[1],1))
Y.hat.calib <- array(0,c(nC,1))
alpha <- array(0,c(nC,1))
P = c()
for (i in 1:dim(Xcal)[1]){
Xtr2 <- rbind(Xtr,Xcal[i,])
K2 <-(Xtr2%*%t(Xtr2)+1)^2
rowCnt <- dim(Xtr2)[1]
mu[i] <- sqrt(1 + t(c(rep(1,(rowCnt-1)),0))%*%solve(K2+a*In2)%*%K2%*%c(rep(0,(rowCnt-1)),1))
#---------------------------------------------------------------------
Y.hat.calib[i] <- kCal[,i]%*%solve(K + a*In)%*%Ytr
alpha[i] <- (abs(Y.hat.calib[i] - Ycal[i]))/mu[i]
P <- c(P,alpha[i])
#---------------------------------------------------------------------
我已经在需要的地方预先分配了,但真的需要摆脱循环,因为它太耗时了。我玩过各种想法,但无法想出办法。
我们将一如既往地欣然接受任何帮助。如果有什么我遗漏的,请告诉我。
【问题讨论】:
-
很抱歉,但最后的大括号还没有打印出来,请放心,它是存在的!我还应该补充一点,在每次迭代时,都会向矩阵添加一个新向量,并将函数应用于新矩阵
-
我也看过 do.call 函数,但看不到它如何应用于这个问题
-
请添加足够有代表性的数据样本(
nXtr、Xcal、nC、...),以便其他人可以运行您的代码并深入研究问题。 -
当然,我会尽快整理一些
-
好的,您应该可以在对象上使用
dput()并将输出复制并粘贴到您的问题中。
标签: r loops matrix vector rbind