首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导致对象消失的函数

导致对象消失的函数
EN

Stack Overflow用户
提问于 2012-08-02 19:29:04
回答 1查看 1.3K关注 0票数 4

这是我遇到的一种非常奇怪的情况。基本上,我试图将累积分布函数与我的数据的G函数相匹配。完成之后,我想绘制模型和原始数据,并将其输出为PDF格式。我将允许代码解释(只需复制和粘贴):

代码语言:javascript
复制
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成为该函数的输入时,它就不再工作了。下面的代码应该像最后一段代码那样执行,但它没有执行。

代码语言:javascript
复制
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)

发生下列错误:

代码语言:javascript
复制
Error in eval(expr, envir, enclos) : object 'new_r' not found

我很困惑。我在这个问题上做了很长时间,只是想不出解决这个问题的办法。PDF是输出的,但它是腐败的,并且不会打开。我不知道为什么new_r‘消失’,但这样做,它会导致所有的绘图操作停止。显然,new_r是函数ModelFit的本地函数,但它似乎也是函数中某些区域的本地函数。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-02 19:47:25

你在里面做了很多含蓄的事.我建议把事情写得更清楚些。

具体来说,mydata.Gest$r <- new_r在您的绘图公式plot(..., cbind(rs, theo) ~ r, ...)中将new_r替换为r。这对我有用。不清楚为什么它在函数之外而不在内部工作,但是依赖plot来查看mydata.Gest的本地作用域new_r是有风险的。

另外,使用=将事物分配给数据帧中的列,而不是<-

一次干净的会议:

代码语言:javascript
复制
data.frame(x<-1:10, y<- 1:10)
ls()

对比

代码语言:javascript
复制
data.frame(x=1:10, y=1:10)
ls()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11784475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档