在包函数中使用data.table

时间:2017-05-12 00:28:22

标签: r data.table

我试图在包中的函数内使用data.table。

combine_tot <- function(x){
    nms <- colnames(x)
    colnames(x) <- c('person', 'texts')
    x <- data.table::data.table(x)

    exp <- parse(text='list(text = paste(texts, collapse = " "))')[[1]]
    out <- x[, eval(exp),
        by = list(person, 'new' = data.table::rleid(person))][,
        'new' := NULL][]
    data.table::setnames(out, nms)
    out
}

这是一个虚拟包,展示了这一点:https://github.com/trinker/testdt

如果我是互动的,那么这个功能就可以了。如果我在包中使用它,那么我会收到以下错误:

Error in paste(texts, collapse = " ") : object 'texts' not found 

但如果我以交互方式运行它,我会按预期得到以下内容:

library(data.table)
x <- data.frame(a= c('a', 'a', 's', 'f', 'd', 'a', 's', 's'), b = state.name[1:8])
combine_tot(x)

   a                    b
1: a       Alabama Alaska
2: s              Arizona
3: f             Arkansas
4: d           California
5: a             Colorado
6: s Connecticut Delaware

我在使用eval(parse的其他类似情况下使用过data.table,但我无法使其工作。我做错了什么?

1 个答案:

答案 0 :(得分:1)

这可能是因为我们没有在&#39;取决于&#39;在&#39;描述&#39;

enter image description here

该软件包已构建,安装并能够运行示例

enter image description here

注意:Author:Maintainer:字段在&#39; DESCRIPTION&#39;中不为空。文件

注2:使用相同的函数combine_tot而无需额外更改