我有一个 data.table:
library(data.table)
mydt <- data.table(index = 1:10)
我在全局环境中尝试时可以使其正常工作,但在调试器中或在包测试中使用它时无法正常工作。
问题在于我不能以标准方式对其进行子集筛选。
Browse[2]> mydt[,index]
Error in `[.data.frame`(x, i, j) : object 'index' not found
Browse[2]> mydt[,list(index)]
Error in `[.data.frame`(x, i, j) : object 'index' not found
下面是一个可重现的例子,我在其中创建了一个包,并在评估名为myfunction
的函数时出现了错误:
library(devtools)
setwd(tempdir())
# make dummy package called foo
create("foo")
setwd("foo")
# add data.table as a package dependency
a <- readLines("DESCRIPTION")
depends.idx <- grepl("Depends", a)
a[depends.idx] <- paste0(a[depends.idx], ", data.table")
writeLines(a, "DESCRIPTION")
# create a dummy function
writeLines("myfunction <- function() {a <- data.table(b=1); return(a[,b])}",
"R/foo.R")
# check and throw error
check()
library(foo)
myfunction()
这里是会话信息:
Browse[2]> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=C LC_COLLATE=C LC_MONETARY=C
[6] LC_MESSAGES=C LC_PAPER=C LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=C LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] PEcAn.data.atmosphere_1.3.3 data.table_1.9.2 RPostgreSQL_0.4 PEcAn.settings_1.3.3
[5] lubridate_1.3.3 PEcAn.DB_1.3.3 DBI_0.2-7 PEcAn.utils_1.3.3
[9] udunits2_0.6 ncdf4_1.12 randtoolbox_1.14 rngWELL_0.10-2
[13] ggplot2_1.0.0 XML_3.98-1.1 plyr_1.8.1 abind_1.4-0
[17] testthat_0.8.1 devtools_1.5.0.99
loaded via a namespace (and not attached):
[1] MASS_7.3-29 RCurl_1.95-4.1 Rcpp_0.11.2 colorspace_1.2-4 digest_0.6.4 evaluate_0.5.5 grid_3.0.2
[8] gtable_0.1.2 httr_0.3 memoise_0.2.1 munsell_0.4.2 parallel_3.0.2 proto_0.3-10 reshape2_1.4
[15] roxygen2_4.0.1 scales_0.2.4 stringr_0.6.2 tools_3.0.2 whisker_0.3-2
index
是 data.table 的一列名称。如果您不熟悉 data.table 包,其中一个特点是允许在不在列名周围加引号的情况下进行索引。 - Abedata.table
放在DESCRIPTION
文件的Depends
部分,对吗? - Abe