我对R很新,但似乎这个问题与以下帖子1,2,3以及不同主题4密切相关。不幸的是,我没有足够的声誉来评论那里。我的问题是,在完成所有建议之后,代码仍然不起作用:
"J" not found in routes[J(lat1, lng1, lat2, lng2), .I, roll = "nearest", by = .EACHI]
而不是'lat1' not found in routes[order(lat1, lng1, lat2, lng2, time)]
)非常感谢您的支持!
修改:@Roland
#' @import data.table
。您是否理解为什么只在DESCRIPTION文件中插入Depends: data.table
不起作用?这可能是文档中有用的提示,还是我错过了?答案 0 :(得分:4)
回答你的问题(编辑后)。
几乎总是在'Depends'中提到的包也应该从NAMESPACE文件中导入:这可以确保当其他包导入当前包时,这些包的任何所需部分都可用。
所以你仍然应该在NAMESPACE中导入,尽管你依赖或导入data.table。
order
来电似乎不是您所期望的,请尝试以下方法:
order("lat1", "lng1", "lat2", "lng2", "time")
library(data.table)
data.table(a=2:1,b=1:2)[order("a","b")]
如果出现问题,我建议您通过编写单元测试来开始调试,以获得预期的结果。将单元测试放入包中的最基本方法是tests
目录中具有stopifnot(...)
调用的普通R脚本。请注意,您需要在脚本开头添加库/需要包。
答案 1 :(得分:0)
除了上面的答案之外,这还更多:我发现这真的很有用...
从文档[Hadley-description](http://r-pkgs.had.co.nz/description.html und)
此处列出的导入软件包必须存在,您的软件包才能 工作。实际上,无论何时安装软件包,这些软件包 如果尚未安装,将安装在您的计算机上 (
devtools::load_all()
还会检查软件包是否已安装)。在此处添加软件包依赖项可确保将其安装。 但是,这并不意味着它会与您的 包(即library(x))。最佳做法是明确引用 使用语法
package::function()
到外部函数。这个 使您很容易确定哪些功能在您的外部 包。当您在 未来。如果您使用其他软件包中的许多功能,那么 详细。此外,与
::
(大约5 $ \ mu $ s,因此只有当您致电 功能数百万次。
NAMESPACE还控制您的用户可以使用哪些外部功能 包,而不必使用
::
。两者都令人困惑 说明(通过“导入”字段)和名称空间(通过导入 指令)似乎与进口有关。这只是一个 不幸的名字选择。导入字段确实没有什么可做的 使用导入到名称空间中的函数:只需确保 软件包已安装时已安装。它没有功能 可用。您需要以完全相同的方式导入函数 不管包装是否附上。
... 这是我的建议:在“ DESCRIPTION”中列出该软件包,以便 安装,然后始终使用pkg::fun()
明确引用它。 除非有充分的理由,否则最好明确。 编写工作要多一些,但是当您阅读时要容易得多 以后再返回代码。反之则不正确。每一个 NAMESPACE中提到的软件包还必须存在于Imports或 取决于字段。