data.table := 不在包函数中工作
data.table := not working in a package function
我将我创建的一个函数移到了 R 包中,但它已停止工作。我得到一个错误:
Error in `:=`((value), 1) :
Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(":=").
奇怪的是,如果我将函数加载到环境中而不是从包中加载,这会起作用吗?这看起来很奇怪......我什至检查它是否是函数中的 data.table
来停止这件事!
data = as.data.table(mtcars)
# I Go into the package, highlight the function and run the code, to load the function into the environment
# This works
create_dummy_var(data, var="cyl")
# This doesn't work (get the error message from above)
myPackage::create_dummy_var(data, var="cyl")
原全函数
#' Converts a variable into a dummy variable
#'
#' Converts a single variable which contains a limited number of values into numeous dummary variables,
#' of 1 if the value is present 0 otherwise. The number of createds vars is equal to the number of unique observations in the varaiable
#'
#' @param dtable A data.table (must be data.table NOT data.frame or tibble)
#' @param var The variable to operate on
#'
#' @return data.table
#' @export
#'
#' @examples
#'
#' df = data.frame("alp" = c("a", "a", "b", "d", "b"), "adults" = 1:5)
#'
#' dt = data.table::data.table(df)
#'
#' create_dummy_var(dt, "alp")
create_dummy_var <- function(dtable, var) {
if (!var %in% names(dtable)) stop(var, " not found in dt")
if(all(class(dtable) != "data.table")) stop("dt must be a data.table")
dtable[, value := 1L]
dcast(dtable , ... ~ dtable[[var]] , value.var = "value", fill = 0, with = FALSE)
}
要将其复制到 R 包中(您可以使用 RStudio 的新项目,用于样板的新包模板)。
> packageVersion("data.table")
[1] ‘1.14.2’
感谢 jangorecki 指出 Importing data.table vignette
问题是在 NAMESPACE 中声明 data.table
的特殊符号。
Importing data.table 小插图没有提到如果您使用 roxygen2 生成 NAMESPACE,则不能在 NAMESPACE 中使用 import(data.table)
。但是一如既往,出色的 usethis
包已经涵盖了 usethis::use_data_table()
。这将创建所有样板文件,现在可以使用了:)
我将我创建的一个函数移到了 R 包中,但它已停止工作。我得到一个错误:
Error in `:=`((value), 1) :
Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(":=").
奇怪的是,如果我将函数加载到环境中而不是从包中加载,这会起作用吗?这看起来很奇怪......我什至检查它是否是函数中的 data.table
来停止这件事!
data = as.data.table(mtcars)
# I Go into the package, highlight the function and run the code, to load the function into the environment
# This works
create_dummy_var(data, var="cyl")
# This doesn't work (get the error message from above)
myPackage::create_dummy_var(data, var="cyl")
原全函数
#' Converts a variable into a dummy variable
#'
#' Converts a single variable which contains a limited number of values into numeous dummary variables,
#' of 1 if the value is present 0 otherwise. The number of createds vars is equal to the number of unique observations in the varaiable
#'
#' @param dtable A data.table (must be data.table NOT data.frame or tibble)
#' @param var The variable to operate on
#'
#' @return data.table
#' @export
#'
#' @examples
#'
#' df = data.frame("alp" = c("a", "a", "b", "d", "b"), "adults" = 1:5)
#'
#' dt = data.table::data.table(df)
#'
#' create_dummy_var(dt, "alp")
create_dummy_var <- function(dtable, var) {
if (!var %in% names(dtable)) stop(var, " not found in dt")
if(all(class(dtable) != "data.table")) stop("dt must be a data.table")
dtable[, value := 1L]
dcast(dtable , ... ~ dtable[[var]] , value.var = "value", fill = 0, with = FALSE)
}
要将其复制到 R 包中(您可以使用 RStudio 的新项目,用于样板的新包模板)。
> packageVersion("data.table")
[1] ‘1.14.2’
感谢 jangorecki 指出 Importing data.table vignette
问题是在 NAMESPACE 中声明 data.table
的特殊符号。
Importing data.table 小插图没有提到如果您使用 roxygen2 生成 NAMESPACE,则不能在 NAMESPACE 中使用 import(data.table)
。但是一如既往,出色的 usethis
包已经涵盖了 usethis::use_data_table()
。这将创建所有样板文件,现在可以使用了:)