我在R中编写了一些代码并且现在有大约600行函数,并且想知道是否有一种简单的方法可以检查,如果我的任何函数使用全局变量(我不会这样做) ; T想)。
例如,如果获取此代码,它可能会给我一个错误:
example_fun<-function(x){
y=x*c
return(y)
}
x=2
c=2
y=example_fun(x)
WARNING: Variable c is accessed from global workspace!
install.packages("codetools")
library("codetools")
x = as.character(lsf.str())
which_global=list()
for (i in 1:length(x)){
which_global[[x[i]]] = codetools::findGlobals(get(x[i]), merge = FALSE)$variables
}
> which_global
$arrange_vars
character(0)
$cal_flood_curve
[1] "..count.." "FI" "FI_new"
$create_Flood_CuRve
[1] "y"
$dens_GEV
character(0)
...
答案 0 :(得分:2)
对于example_function
这样的给定函数,您可以使用包codetools
:
codetools::findGlobals(example_fun, merge = FALSE)$variables
#> [1] "c"
要收集所有功能,请参阅Is there a way to get a vector with the name of all functions that one could use in R?
答案 1 :(得分:0)
如何清空全局环境并运行该功能?如果要在函数中使用来自全局环境的对象,则会出现错误,例如
V <- 100
my.fct <- function(x){return(x*V)}
> my.fct(1)
[1] 100
#### clearing global environment & re-running my.fct <- function... ####
> my.fct(1)
Error in my.fct(1) : object 'V' not found