相关疑难解决方法(0)

R scoping:禁止函数中的全局变量

如果在R函数中使用全局变量,有没有办法抛出警告(并失败..)?我认为这样可以避免意外行为......例如

sUm <- 10
sum <- function(x,y){
sum = x+y
return(sUm)
}
Run Code Online (Sandbox Code Playgroud)

由于"拼写错误"的回报,该功能将永远返回10.而不是返回sUm它的值应该失败.

scope global r

11
推荐指数
2
解决办法
1856
查看次数

在包代码中从其他包的命名空间中查找对象

我正在重构一个导入许多其他包的完整命名空间的包。我相信这些依赖项中的许多用于单个函数调用用途,使用 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 devtools roxygen roxygen2 r-package

9
推荐指数
2
解决办法
196
查看次数

确保函数不使用全局变量

这可能与类似的问题有点相反。我希望R在代码中的任何位置中止\警告,如果函数在父环境中使用了变量。是否有一些基本的选择可以实现?我想要一个会话通用的解决方案,而不是特定的检查。谢谢。

scope r

5
推荐指数
1
解决办法
304
查看次数

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)

testing debugging environment r function

5
推荐指数
1
解决办法
68
查看次数