这是我遇到的一个非常奇怪的情况。基本上,我试图将累积分布函数拟合到我的数据的G函数中。完成后,我想绘制模型和原始数据,并将其输出为PDF。我会让代码解释(简单的复制和粘贴):导致对象消失的函数
library(spatstat)
data(swedishpines)
mydata <- swedishpines
mydata.Gest <- Gest(mydata)
Gvalues <- mydata.Gest$rs
count <- (which(Gvalues == 1))[1]
new_r <- seq(1/count, length(Gvalues)/count, by = 1/count)
GvsR_dataframe <- data.frame(G <- Gvalues, R <- new_r)
themodel <- suppressWarnings(nls(G ~ pnorm(R, mean, sd), data = GvsR_dataframe, start = list(mean=0.4, sd=0.2), trace = FALSE))
pdf(file = "ModelPlot.pdf")
plot(mydata.Gest, cbind(rs, theo) ~ new_r, lty = c(1, 2), col = c("black", "red"), xlim = c(0, max(new_r)), ylim = c(0,1), main = paste("Model-fitting for G Function \n Mean = ",as.numeric(coef(themodel)[1]),"\n Standard Deviation = ",as.numeric(coef(themodel)[2]), sep=''), ylab = "G(r)", xlab = "Distance Between Particles (r)", legend = NULL)
lines(new_r, predict(themodel), lty = 2, col = "blue")
legend("bottomright", c("CSR", "Swedish Pines", "Normal Probability \n Density Function"), lty = c(2, 4, 1, 2), col = c("red", "black", "blue"), bg = 'grey', border = 'black')
graphics.off()
上面的代码完美地工作。
现在是奇怪的部分。
当我封装mydata <- swedishpines
作为函数之后的所有命令,并且导致mydata
成为此函数的输入时,它不再起作用。以下代码应该执行代码的最后一部分,但它不。
library(spatstat)
data(swedishpines)
mydata <- swedishpines
ModelFit <- function(mydata) {
mydata.Gest <- Gest(mydata)
Gvalues <- mydata.Gest$rs
count <- (which(Gvalues == 1))[1]
new_r <- seq(1/count, length(Gvalues)/count, by = 1/count)
GvsR_dataframe <- data.frame(G <- Gvalues, R <- new_r)
themodel <- suppressWarnings(nls(G ~ pnorm(R, mean, sd), data = GvsR_dataframe, start = list(mean=0.4, sd=0.2), trace = FALSE))
pdf(file = "ModelPlot.pdf")
plot(mydata.Gest, cbind(rs, theo) ~ new_r, lty = c(1, 2), col = c("black", "red"), xlim = c(0, max(new_r)), ylim = c(0,1), main = paste("Model-fitting for G Function \n Mean = ",as.numeric(coef(themodel)[1]),"\n Standard Deviation = ",as.numeric(coef(themodel)[2]), sep=''), ylab = "G(r)", xlab = "Distance Between Particles (r)", legend = NULL)
lines(new_r, predict(themodel), lty = 2, col = "blue")
legend("bottomright", c("CSR", "Swedish Pines", "Normal Probability \n Density Function"), lty = c(2, 4, 1, 2), col = c("red", "black", "blue"), bg = 'grey', border = 'black')
graphics.off()
}
ModelFit(mydata)
出现以下错误:
Error in eval(expr, envir, enclos) : object 'new_r' not found
我很困惑。我一直在研究这个问题很长一段时间,只是不能想出解决这个问题的办法。 PDF输出,但它是腐败的,不会打开。我不知道为什么new_r
'消失',但这样做会导致所有绘图操作停止。显然,new_r
是函数ModelFit
的本地函数,但它几乎看起来好像在函数的某些区域也是本地的。
任何帮助将不胜感激。
我无法重现。你确定你的第二个代码块中的代码与你在R中执行的代码完全相同吗? – 2012-08-02 19:34:00
我相信这是。我在第二个模块中改变的是一个函数定义(现在包含第一个模块的大部分代码),随后调用该函数。 – MikeZ 2012-08-02 19:38:56
有趣。我非常感谢任何帮助,因为我试图在Linux服务器上以批处理模式运行一个大型程序,而这一小段代码让我感到非常悲伤。 – MikeZ 2012-08-02 19:40:10