![](/img/trans.png)
[英]What is the correct way to import C header functions into an R package when they are exported from another?
[英]R Functions require package declaration when they are included from another file?
我正在R中编写一些数据操作脚本,最后我决定创建一个外部.r文件并从那里调用函数。 但是当我尝试调用某些函数时,它开始给我带来一些问题。 简单的例子:
这可以正常工作:
change_column_names <- function(file,new_columns,seperation){
new_data <- read.table(file, header=TRUE, sep=seperation)
colnames(new_data) <- new_columns
write.table(new_data, file=file, sep=seperation, quote=FALSE, row.names = FALSE)
}
change_column_names("myfile.txt",c("Column1", "Column2", "Cost"),"|")
当我创建文件“ data_manipulation.r”并将其放在上面的change_column_names
函数时,执行此操作
sys.source("data_manipulation.r")
change_column_names("myfile.txt",c("Column1", "Column2", "Cost"),"|")
这是行不通的。 它给了我could not find function "read.table"
错误。 我通过将函数调用更改为util:::read.table
和util:::write.table
来修复它。
但这有点令人沮丧。 现在,我对aggregate
函数有同样的问题,我什至不知道它属于哪个包。
我的问题:哪个软件包aggregate
属于? 我如何轻松知道包功能来自何处? 有没有更清洁的方法来解决此问题?
默认情况下, sys.source()
在基本环境(空)中而不是在全局环境(通常在其中评估代码)中求值。 您可能应该只使用source()
。
您还可以通过查看功能的环境来了解功能的来源。
environment(aggregate)
# <environment: namespace:stats>
对于问题的第一部分:如果要查找某个函数所属的包,并且该函数正常工作,则可以执行以下两项操作(可能更多)之一:
1.)访问帮助文件
?aggregate
,您将在帮助文件的顶部看到该软件包所属的软件包。
另一种方法是在R控制台中简单地键入不带任何参数的aggregate
:
> aggregate
function (x, ...)
UseMethod("aggregate")
<bytecode: 0x7fa7a2328b40>
<environment: namespace:stats>
名称空间是它所属的包。
2)您遇到的这两个函数都是基本R函数,应始终加载。 我无法重现该问题。 尝试使用source
而不是sys.source
,让我知道它是否可以减轻您的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.