gpt4 book ai didi

r - 语句不在函数内执行,独立执行

转载 作者:行者123 更新时间:2023-12-02 04:58:55 24 4
gpt4 key购买 nike

我遇到了一个奇怪的问题(我是 R 的新手)。我尝试创建一个函数如下:

library(ggplot2)
median_confidence_interval <- function(x) {
quart_list<-c()
return_data<-data.frame(lower_ci=0,median=0,upper_ci=0)
for(i in 1:1000){
y<-x[as.integer(runif(length(x), min = 1, max = length(x) + 1))]
median<-median(y)
quart_list=c(quart_list,median)
}
return_data$median<-median(quart_list)
return_data$lower_ci<-quantile(quart_list,probs=0.025)
return_data$upper_ci<-quantile(quart_list,probs=0.975)
p <- ggplot()
p <- p + geom_density(aes(x=x)) + geom_density(aes(x=quart_list))
p <- p + geom_vline(aes(xintercept = return_data$median, color='red'))
p <- p + geom_vline(aes(xintercept = return_data$lower_ci, color='blue'))
p <- p + geom_vline(aes(xintercept = return_data$upper_ci, color='green')) + coord_cartesian(xlim = c(min(x),max(x)))
png("density_confidence_internal.png")
plot(p)
dev.off()
return_data
}

在这段代码中,我只是想创建一个绘图并保存它。尽管我能够在函数外部独立执行这些语句中的每一个,但不能在函数内部执行。该函数编译没有错误,但在运行该函数时显示找不到“quart_list”。如果工作区中存在 quart_listreturn_data,那么我就可以执行该函数并获得结果。当我清除工作区并执行函数时,我在运行时遇到了同样的错误(不是编译)。

另一个问题是,当我调用函数 median_confidence_interval(x) 时,它希望我只提供“x”作为参数,它不会像 median_confidence_interval(possum) $耳罩)。为什么会这样?

有人能给我指明方向吗?

最佳答案

ggplot 对象的环境评估有点神秘。但是,如果您还记得 ggplot 希望将 data.frames 传递给 data 参数和 aes 中的值> 应该是 data.frame 的列,您通常会避免出现问题。

为了调试这样的事情,我发现将 print 语句插入到函数中有助于确定我完成了多远。 (查看注释行)

相应地调整你的函数给出:

median_confidence_interval <- function(x) {
quart_list<-c()
return_data<-data.frame(lower_ci=0,median=0,upper_ci=0)
for(i in 1:1000){
y<-x[as.integer(runif(length(x), min = 1, max = length(x) + 1))]
median<-median(y)
# print ('inside for loop')
quart_list=c(quart_list,median)
}

# print('past for loop')
return_data$median<-median(quart_list)
return_data$lower_ci<-quantile(quart_list,probs=0.025)
return_data$upper_ci<-quantile(quart_list,probs=0.975)

# print('start of ggplot code')
foo=data.frame(q=quart_list, x=x)
p <- ggplot()
p <- p + geom_density(data=foo, aes(x=x)) + geom_density(data=foo, aes(x=q))
# print('past first quart_list reference in ggplot')
p <- p + geom_vline(data=return_data, aes(xintercept = median, color='red'))
p <- p + geom_vline(data=return_data, aes(xintercept = lower_ci, color='blue'))
p <- p + geom_vline(data=return_data, aes(xintercept = upper_ci, color='green')) + coord_cartesian(xlim = c(min(x), max(x)))
png("/tmp/density_confidence_internal.png")
plot(p)
dev.off()
return_data
}

此外,我认为@DWin 在他的评论中有一个很好的观点!

关于r - 语句不在函数内执行,独立执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18731639/

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