【发布时间】:2019-01-30 14:50:31
【问题描述】:
我有以下功能,我将其包装在一个包中:
str_grepl <- function(data) {
data <- as.data.table(data)
data <- data[!grepl("^set", Species)]
return(data)
}
当我运行此函数并将该函数应用于我的数据时,它工作正常。
library(data.table)
str_grepl(iris)
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1: 7.0 3.2 4.7 1.4 versicolor
#> 2: 6.4 3.2 4.5 1.5 versicolor
#> 3: 6.9 3.1 4.9 1.5 versicolor
#> 4: 5.5 2.3 4.0 1.3 versicolor
#> 5: 6.5 2.8 4.6 1.5 versicolor
#> 6: 5.7 2.8 4.5 1.3 versicolor
但是,当我使用 RStudio/devtools 创建包时,保存此函数并使用 load_all() 加载它时,该函数不起作用:
> str_grepl(iris)
Error in grepl("^set", Species) : object 'Species' not found
有趣的是,如果我安装包并加载它,它就可以工作。
devtools::install()
str_grepl(iris)
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1: 7.0 3.2 4.7 1.4 versicolor
#> 2: 6.4 3.2 4.5 1.5 versicolor
#> 3: 6.9 3.1 4.9 1.5 versicolor
#> 4: 5.5 2.3 4.0 1.3 versicolor
#> 5: 6.5 2.8 4.6 1.5 versicolor
#> 6: 5.7 2.8 4.5 1.3 versicolor
知道这是为什么吗?
我已将示例包放在 Github 上:https://github.com/filipwastberg/greplpackage
【问题讨论】:
-
您能在这方面再扩展一点吗? “但是,当我使用 RStudio/devtools 创建一个包时,保存此函数并使用 load_all() 加载它,该函数不起作用。”我做了类似的事情,只是我将其描述为将函数保存在“greplpackage”包中,然后使用 devtools::load_all() 模拟安装和加载包。
-
您的全局环境或搜索列表中的其他位置可能有一个名为
Species的对象。 -
这似乎是 Microsoft R Open 的问题,我将其用于 MLK 库。会不会是 Microsoft R Open 在全局环境或其他地方有一个对象
Species?最好的检查方法是什么? -
@akrun 我认为问题不在于 data.table。
标签: r string-matching devtools grepl