【发布时间】:2020-06-07 10:33:35
【问题描述】:
如果我使用源代码,那么一切正常,但是当我创建包/函数时,它会给我一个错误。我错过了什么吗?
测试包
测试
library("data.table")
dd <- mtcars
setDT(dd)
dd$cnt <- 1
eval(parse(text=paste0("dd <- unique(dd[,list(cnt, mpg, cyl)])")))
eval(parse(text=paste0("dd1 <- dd[order(mpg, cyl)]")))
print(dd1)
}
在 Linux 上使用 R CMD build 创建包
测试 |__R |__test.r |__描述 |__命名空间R CMD 构建测试
R CMD INSTALL test_1.0.tar.gz
描述内容
包装:测试 标题:测试 版本:1.0 作者@R:人(“xyz”,“xyz”,电子邮件=“xyz@xyz.com”, 角色 = c("aut", "cre")) 说明:测试 取决于:R (>= 3.6.0) 许可证:测试 编码:UTF-8 懒惰数据:真 进口: 数据表在 R 中使用函数
库(“测试”)
测试()
得到如下错误
[.data.frame(x, i, j) 中的错误:对象 'cnt' 不是 fo
没有包的 R 代码,它正在工作
library("data.table")
dd <- mtcars
setDT(dd)
dd$cnt <- 1
eval(parse(text=paste0("dd <- unique(dd[,list(cnt, mpg, cyl)])")))
eval(parse(text=paste0("dd1 <- dd[order(mpg, cyl)]")))
print(dd1)
【问题讨论】:
-
查看
package.skeleton()函数,看看它创建了什么——拥有一个包需要更多的时间。完整的详细信息在 Writing R Extensions 手册中。 (我的pkgKitten包有助于对package.skeleton()进行一些后处理,这会留下一些你必须编辑的东西,当你开始时会感到困惑。RStudio 也有一个包生成器助手,其他包也是如此。) -
谢谢,我在包的目录结构中添加了更多细节。我将研究 package.skeleton()。只是想看看在不使用许多其他依赖包等的情况下创建测试包的最简单方法是什么。
-
好方法!在这种情况下,base R 及其
package.skeleton()函数应该是你最好的新朋友。我只是觉得它在创建后永远不会通过R CMD check --as-cran,因此有点令人反感,因此pkgKitten。但我使用与您相同的方法:首先尝试使用最少数量的帮助器,以真正了解最小结构。 -
实际上,几年前我举办了一个研讨会,在那里我们手动创建了每个文件,您可以查看幻灯片/检查它是否仍然存在:dirk.eddelbuettel.com/papers/r_package_development_nov2014.pdf
-
没有二进制编译,但我也发现
data.table有时需要格外小心。你在NAMESPACE中有import()吗? (当然,你不应该在包中的 R 代码中调用library()。看看还有什么R CMD check和/或 RStudio 中的check按钮)。
标签: r data.table r-package