gpt4 book ai didi

r - 导致对象消失的函数

转载 作者:行者123 更新时间:2023-12-05 00:33:35 25 4
gpt4 key购买 nike

这是我遇到的一个非常奇怪的情况。基本上,我正在尝试将累积分布函数拟合到我的数据的 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 ,但它几乎似乎也是函数中某些区域的局部。

任何帮助将不胜感激。

最佳答案

你在那里做了很多隐含的东西......我建议更明确地写东西。

具体来说,mydata.Gest$r <- new_r然后替换 new_rr在您的绘图公式中,plot(..., cbind(rs, theo) ~ r, ...) .这对我行得通。不知道为什么它在函数外部而不是内部工作,但依赖于 plot查看mydata.Gest的本地范围之外为 new_r是有风险的。

另外,使用 =将事物分配给数据框中的列而不是 <-
从干净的 session :

data.frame(x<-1:10, y<- 1:10)
ls()

相对
data.frame(x=1:10, y=1:10)
ls()

关于r - 导致对象消失的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11784475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com