Mik*_*keZ 4 variables r function object spatstat
这是一个非常奇怪的情况,我遇到过.基本上,我正在尝试将累积分布函数拟合到我的数据的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()
Run Code Online (Sandbox Code Playgroud)
上面的代码完美无缺.
现在为了奇怪的部分.
当我将所有命令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)
Run Code Online (Sandbox Code Playgroud)
发生以下错误:
Error in eval(expr, envir, enclos) : object 'new_r' not found
Run Code Online (Sandbox Code Playgroud)
我非常困惑.我已经在这方面工作了很长时间,并且无法找到解决这个问题的方法.PDF已输出,但已损坏,无法打开.我不知道为什么new_r
'消失',但这样做会导致所有的绘图操作停止.显然new_r
是函数的局部函数ModelFit
,但它几乎看起来似乎是函数中某些区域的局部函数.
任何帮助将不胜感激.
你在那里做了很多隐含的东西......我建议你更明确地写一些东西.
具体来说,mydata.Gest$r <- new_r
然后更换new_r
与r
您的情节公式中,plot(..., cbind(rs, theo) ~ r, ...)
.这对我行得通.不确定为什么它在函数之外工作而不是在函数内部,但依赖于plot
在本地范围之外mydata.Gest
查看new_r
是有风险的.
另外,用于=
将事物分配给数据框中的列而不是<-
从一个干净的会议:
data.frame(x<-1:10, y<- 1:10)
ls()
Run Code Online (Sandbox Code Playgroud)
与
data.frame(x=1:10, y=1:10)
ls()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
676 次 |
最近记录: |