data.table抛出"object not found"错误。

14 浏览
0 Comments

data.table抛出"object not found"错误。

我有一个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      

0
0 Comments

在使用R语言的data.table包时,可能会遇到"object not found"的错误。该错误的原因是在创建一个名为foo的包的过程中,没有正确设置DESCRIPTION文件中的作者和维护者字段,导致在加载foo包时出现错误。解决该问题的方法是在DESCRIPTION文件中正确设置作者和维护者字段。

下面是一个复现该问题的例子。首先,在R中运行以下代码:

library(devtools)
setwd(tempdir())
create("foo")
setwd("foo")
a <- readLines("DESCRIPTION")
depends.idx <- grepl("Depends", a)
a[depends.idx] <- paste0(a[depends.idx], ", data.table")
writeLines(a, "DESCRIPTION")
writeLines("myfunction <- function() {a <- data.table(b=1); return(a[,b])}",
            "R/foo.R")
check()
library(foo)
myfunction()

运行以上代码后,会出现"object not found"的错误。错误的具体信息是在加载foo包时,DESCRIPTION文件中的作者和维护者字段没有正确设置。这个错误可以通过在DESCRIPTION文件中添加正确的作者和维护者字段来解决。

以上代码中,我们创建了一个名为foo的包,并在DESCRIPTION文件中添加了data.table作为依赖项。然后,我们在R/foo.R文件中添加了一个名为myfunction的函数,该函数使用data.table包来创建一个数据表并返回一个列。最后,我们使用check()函数来检查并构建foo包,并使用library(foo)来加载foo包,然后调用myfunction()函数。

然而,由于没有正确设置DESCRIPTION文件中的作者和维护者字段,导致加载foo包时出现错误。为了解决这个问题,我们需要在DESCRIPTION文件中添加正确的作者和维护者字段。具体来说,我们需要在DESCRIPTION文件中添加如下内容:

Authors: Your Name

Maintainer: Your Name

将"Your Name"替换为你的名字,将"your.email@example.com"替换为你的邮箱地址。

添加了正确的作者和维护者字段后,重新运行以上代码,就不会再出现"object not found"的错误了。

,当使用R语言的data.table包时,如果出现"object not found"的错误,可能是因为在创建包时没有正确设置DESCRIPTION文件中的作者和维护者字段。要解决这个问题,需要在DESCRIPTION文件中添加正确的作者和维护者字段。

0