我正在用R开发一个包.我有一堆函数,其中一些需要一些全局变量.如何管理包中的全局变量?
我已经阅读了一些关于环境的内容,但我不明白它是如何工作的,如果这就是解决问题的方法.
我使用R遇到了一个小问题......
在以下数据框中
test <- data.frame(v1=c(rep(1,3),rep(2,3)),v2=0)
Run Code Online (Sandbox Code Playgroud)
我想在v1为1的行中更改v2的值.
test[test$v1==1,"v2"] <- 10
Run Code Online (Sandbox Code Playgroud)
工作得很好.
test
v1 v2
1 1 10
2 1 10
3 1 10
4 2 0
5 2 0
6 2 0
Run Code Online (Sandbox Code Playgroud)
但是,我需要在函数中执行此操作.
test <- data.frame(v1=c(rep(1,3),rep(2,3)),v2=0)
test.fun <- function (x) {
test[test$v1==x,"v2"] <- 10
print(test)
}
Run Code Online (Sandbox Code Playgroud)
调用该函数似乎有效.
test.fun(1)
v1 v2
1 1 10
2 1 10
3 1 10
4 2 0
5 2 0
6 2 0
Run Code Online (Sandbox Code Playgroud)
但是,当我现在看看测试时:
test
v1 v2
1 1 0
2 1 0
3 1 0 …Run Code Online (Sandbox Code Playgroud) 该ROCR库R提供了绘制平均 ROC 曲线的能力(来自ROCR 参考手册):
library(ROCR)
library(ROCR)
data(ROCR.xval)
# plot ROC curves for several cross-validation runs (dotted
# in grey), overlaid by the vertical average curve and boxplots
# showing the vertical spread around the average.
data(ROCR.xval)
pred <- prediction(ROCR.xval$predictions, ROCR.xval$labels)
perf <- performance(pred,"tpr","fpr")
plot(perf,col="grey82",lty=3)
plot(perf,lwd=3,avg="vertical",spread.estimate="boxplot",add=TRUE)
Run Code Online (Sandbox Code Playgroud)
迷人的。不幸的是,似乎无法将平均 ROC 曲线本身作为对象/数据帧/等获取。用于进一步的统计测试(例如,使用 pROC)。我确实做了一些研究(尽管可能是在事实之后),我发现了这篇文章:
我查看了 ROCR 的代码,发现以下几行用于将结果传递给绘图:
performance_plots.R,(从第 451 行开始)
## compute average curve
perf.avg <- perf.sampled
perf.avg@x.values <- list( rowMeans( data.frame( perf.avg@x.values))) …Run Code Online (Sandbox Code Playgroud) 我有一个R的脚本,它采用R的其他脚本并以这种方式操作它们,并执行它们的代码.我的脚本使用了一些变量(显然),当其他脚本使用公共变量名时,我就搞得一团糟.我希望我能像胶囊一样执行其他脚本,这样重合的变量不会相互影响.
我一直在阅读有关环境的文章,并进行了大量试验,但我没有发现它们的真正含义.
例:
script1.txt
___________
i=sample(10:20,1)
script2.txt
___________
i=sample(10:20,1)
myscript.txt
___________
other.script = c("script1.txt", "script2.txt")
for( i in 1:2 ) {
source(other.script[i])
}
i==2
Run Code Online (Sandbox Code Playgroud)
我希望每个变量"i"在不影响其他变量的情况下履行其职责(特别是myscript中的变量,我不关心其他变量).