【发布时间】:2018-06-14 11:08:50
【问题描述】:
我目前正在编写代码来运行 2D 空间自适应样条拟合技术的模拟,在此代码中,我有一个 for 循环,它应该更改我在每次迭代中构建模型的 x、y 和 z 值。
注意要运行此代码,您将需要来自 github 的 MRSea 包。这个可以
下载使用:
devtools::install_git("https://github.com/lindesaysh/MRSea.git")
在一些非常有用的 cmets 之后(谢谢大家),我将代码简化为:
simulate <- function(niter=5, npoints=10, nknots=9, fitmeasure="AIC", startknots=5, minknots=2,maxknots=9, knotgap=0 ) {
require(MRSea)
x <- matrix(nrow=niter, ncol=npoints)
y <- matrix(nrow=niter, ncol=npoints)
rnd <- matrix(nrow=niter, ncol=npoints)
mygrid <- expand.grid(seq(0,1, length=npoints), seq(0,1, length=npoints))
for (i in 1:niter) {
x[i,] <- runif(npoints)
y[i,] <- runif(npoints)
mu <- x[i,]*sin(4*pi*y[i,])
sigma <- diff(0.25 * range(mu))
rnd[i,] <- rnorm(npoints)
z <- mu + sigma*rnd[i,]
dat <- data.frame(x.pos=x[i,], y.pos=y[i,], response=z)
init <- glm(response ~ 1, data=dat)
knotgrid <- getKnotgrid(coordData = cbind(x[i,],y[i,]), numKnots = nknots, plot=F)
distMats <- makeDists(cbind(x[i,],y[i,]), na.omit(knotgrid))
salsa2dlist <- list(fitnessMeasure = fitmeasure, knotgrid = knotgrid,
startKnots=startknots, minKnots=minknots, maxKnots=maxknots, gap=knotgap)
predgrid <- makeDists(mygrid, na.omit(knotgrid))$dataDist
sim <- runSALSA2D(model=init, salsa2dlist, d2k=distMats$dataDist,
k2k=distMats$knotDist, splineParams=NULL, tol=0, chooserad=F,
panels=NULL, suppress.printout=TRUE)
}
return(x) # Can return x,y or rnd to see the issue
}
simulate()
我已经确定删除以下代码行允许 runif() 行正确运行并产生不同的值:
sim <- runSALSA2D(model=init, salsa2dlist, d2k=distMats$dataDist,
k2k=distMats$knotDist, splineParams=NULL, tol=0, chooserad=F,
panels=NULL, suppress.printout=TRUE)
有谁知道为什么这条线可能会导致我的代码出现问题以及解决问题的潜在方法?
谢谢。
【问题讨论】:
-
我们是否需要所有这些代码才能理解您的问题?你能把它简化为一个最小的可重现的例子吗?
-
我建议做一个这样的游戏:你可以删除多少行代码并且仍然看到预期的问题?这是一种非常有用的调试技术,如果您自己不解决问题,您将在完成后获得更快的帮助。
-
但也许您调用的某些函数使用了
set.seed,或者将surface分配给1以外的其他对象,因此for 循环不会运行,或者... 查找的好方法out 是删除除for循环之外的所有内容,并一次添加一位,直到观察到问题为止。您还可以在循环中添加一些print语句或browser()以检查实际情况。 -
感谢您的帮助,我已经用最简单的情况编辑了问题,我可以找到重现问题并确定导致问题的行。
-
见 not-quite-dups stackoverflow.com/q/14324096/210673 和 stackoverflow.com/q/23090958/210673
标签: r function for-loop spline