相关疑难解决方法(0)

在我自己的包中使用data.table包

我试图在我自己的包中使用data.table包.MWE如下:

我创建了一个函数test.fun,它只是创建一个小的data.table对象,然后将"Val"列分组为"A"列.代码是

test.fun<-function ()
{
    library(data.table)
    testdata<-data.table(A=rep(seq(1,5), 5), Val=rnorm(25))
    setkey(testdata, A)
    res<-testdata[,{list(Ct=length(Val),Total=sum(Val),Avg=mean(Val))},"A"]
    return(res)
}
Run Code Online (Sandbox Code Playgroud)

当我在常规R会话中创建此函数,然后运行该函数时,它按预期工作.

> res<-test.fun()
data.table 1.8.0  For help type: help("data.table")
> res
     A Ct      Total        Avg
[1,] 1  5 -0.5326444 -0.1065289
[2,] 2  5 -4.0832062 -0.8166412
[3,] 3  5  0.9458251  0.1891650
[4,] 4  5  2.0474791  0.4094958
[5,] 5  5  2.3609443  0.4721889
Run Code Online (Sandbox Code Playgroud)

当我将此函数放入包中时,安装包,加载包,然后运行该函数,我收到一条错误消息.

> library(testpackage)
> res<-test.fun()
data.table 1.8.0  For help type: help("data.table")
Error in `[.data.frame`(x, i, j) : object 'Val' not found
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释为什么会发生这种情况以及我可以做些什么来解决它.很感谢任何形式的帮助.

r data.table

73
推荐指数
2
解决办法
8368
查看次数

roxygen2会自动为"Imports:"包编写NAMESPACE指令吗?

tl;我的问题的博士版本

如果我想导入包,是否必须手动将import()指令写入我的NAMESPACE文件?似乎roxygen2对我来说不会神奇地做到这一点,即使我在他的描述中将它们列为"Imports:".

富勒版

这是一个非常愚蠢的问题,但我问,因为答案对我来说并不明显.

roxygen2用来处理我的R包文档.当我想确保导出函数时,我@export在其roxygen块中添加了一个标记.后续运行roxygenize()将相应地编写NAMESPACE指令.

但是,我的包目前正在导入其他几个:

Depends:
    R (>= 2.13.0),
    ggplot2 (>= 0.8.9)
Imports:
    RColorBrewer,
    plyr,
    gridExtra
Run Code Online (Sandbox Code Playgroud)

看来虽然roxygen2 导出的函数重写NAMESPACE指令,但它不会自动重写NAMESPACE以反映我指定的包应该在我的DESCRIPTION中导入.

r roxygen roxygen2

45
推荐指数
1
解决办法
8692
查看次数

描述顺序导入:和R 2.14.0包检查中的NAMESPACE import()

我正试图在检查包时追逐功能名称之间的冲突.我最终可能会直接询问这个问题,但首先,我想知道三件事情,R-exts中似乎都没有提及:

  1. DESCRIPTION:Imports和NAMESPACE导入()中列出的包应该是相同的,对吧?
  2. 在任何一个列表中,导入的顺序是否重要?如果是的话,是否有关于如何订购的一般建议?
  3. 我使用R --vanilla CMD检查pkg_name以避免我的.Rprofile干扰.当我的.Rprofile处于活动状态并包含库(pkg_name)语句时,这些语句的顺序是否重要?

r package

11
推荐指数
1
解决办法
1727
查看次数

标签 统计

r ×3

data.table ×1

package ×1

roxygen ×1

roxygen2 ×1