如果在R函数中使用全局变量,有没有办法抛出警告(并失败..)?我认为这样可以避免意外行为......例如
sUm <- 10
sum <- function(x,y){
sum = x+y
return(sUm)
}
Run Code Online (Sandbox Code Playgroud)
由于"拼写错误"的回报,该功能将永远返回10.而不是返回sUm它的值应该失败.
我正在重构一个导入许多其他包的完整命名空间的包。我相信这些依赖项中的许多用于单个函数调用用途,使用 importFrom 可以更好地处理它们,或者是不再使用的孤立依赖项。
包中有足够的代码,手动检查每一行寻找不熟悉的函数调用会很乏味。
如何确定在包中使用导入的命名空间中的对象的位置和次数?请注意,这个包不包括单元测试。
这是一个可重现的示例:
DESCRIPTION 文件:
Package: my_package
Title: title
Version: 0.0.1
Authors@R: person(
given = "A",
family = "Person",
role = c("aut", "cre"),
email = "person@company.com"
)
Description: Something
License: Some license
Encoding: UTF-8
LazyData: true
RoxygenNote: 7.1.1
Imports:
dplyr,
purrr,
stringr
Run Code Online (Sandbox Code Playgroud)
NAMESPACE 文件:
import(dplyr)
import(purrr)
import(stringr)
Run Code Online (Sandbox Code Playgroud)
my_package.R 文件:
#' my_package
#' @docType package
#' @name my_package
NULL
#' @import dplyr
#' @import purrr
#' @import stringr
NULL
Run Code Online (Sandbox Code Playgroud)
functions.R 文件
#' add 1 to "banana" column and …Run Code Online (Sandbox Code Playgroud) 这可能与类似的问题有点相反。我希望R在代码中的任何位置中止\警告,如果函数在父环境中使用了变量。是否有一些基本的选择可以实现?我想要一个会话通用的解决方案,而不是特定的检查。谢谢。
定义R函数时,有时会想不到它依赖于封闭环境中的对象。就像是:
a <- 1
fn <- function(x) x + a
Run Code Online (Sandbox Code Playgroud)
如果这是无意发生的,则可能导致难以调试的问题。
有没有简单的方法可以测试是否fn使用封闭环境中的对象?
就像是:
test(fn=fn, args=list(x=1))
## --> uses 'a' from enclosing environment
Run Code Online (Sandbox Code Playgroud)