当我制作没有错误信息的个人R包时,如何将函数与data.table结合起来?

当我制作没有错误信息的个人R包时,如何将函数与data.table结合起来?,r,function,data.table,package,R,Function,Data.table,Package,我基于data.table R包制作了一个函数来处理带有重复项的矩阵 我已经在R studio中运行了我的代码,发现它工作正常。 所以我用roxygen2和devtools R包制作了我的R包 不幸的是,如果我附加我的库并运行函数,它会显示以下错误消息 .subset(x,j)中出错:下标类型“list”无效 我该如何解决这个问题 作用 例子 如果您试图创建一个包,请确保包含来自具有命名空间的其他包的所有函数。例如,直到我将as.data.table(mm.dup)更改为data.table::

我基于data.table R包制作了一个函数来处理带有重复项的矩阵

我已经在R studio中运行了我的代码,发现它工作正常。 所以我用roxygen2和devtools R包制作了我的R包

不幸的是,如果我附加我的库并运行函数,它会显示以下错误消息

.subset(x,j)中出错:下标类型“list”无效

我该如何解决这个问题

作用 例子
如果您试图创建一个包,请确保包含来自具有命名空间的其他包的所有函数。例如,直到我将
as.data.table(mm.dup)
更改为
data.table::as.data.table(mm.dup)
,此代码才为我运行。之后,这对我来说毫无问题,谢谢你的评论,朱利安。您是否制作了包并附加它以运行代码?即使我添加了data.table::as.data.table(mm.dup),当我通过package.No加载函数时,它仍然会显示错误消息。我不想做一个全新的包裹。代码是否在包外为您运行?您是否知道存在重复的
。矩阵
?请参见
?duplicated.matrix
另请参见在您自己的项目中使用
data.table
的vignette。如果您试图创建一个包,请确保包含来自具有命名空间的其他包的所有函数。例如,直到我将
as.data.table(mm.dup)
更改为
data.table::as.data.table(mm.dup)
,此代码才为我运行。之后,这对我来说毫无问题,谢谢你的评论,朱利安。您是否制作了包并附加它以运行代码?即使我添加了data.table::as.data.table(mm.dup),当我通过package.No加载函数时,它仍然会显示错误消息。我不想做一个全新的包裹。代码是否在包外为您运行?您是否知道存在重复的
。矩阵
?请参见
?复制的.matrix
另请参见在您自己的项目中使用
数据.table
的小插曲(以及一般创建下游项目)
dup.matrix=function(mm=NA,key_column=NA,my.Function=NA){

  # Check duplicates in key_column

    print('Check duplciates')
    dups=mm[,key_column]
    dups=unique(dups[which(duplicated(dups))])

  # Get duplicated matrix

    print('Check duplciate matrix')
    wh=which(mm[,key_column] %in% dups)
    mm.dup=mm[wh,]
    mm.uniq=as.data.frame(mm[-wh,],stringsAsFactors=F)


  # Apply function to duplicated matrix
    print('Apply function to duplicated matrix')
    mm.dup=as.data.table(mm.dup)
    mm.dup2=mm.dup[,lapply(.SD,my.Function),by=key_column]
    mm.dup2=as.data.frame(mm.dup2,stringsAsFactors=F)
  # combine unique and processed dup matrix
    print('Combine unique and processed dup matrix')
    mm2=rbind(mm.uniq,mm.dup2)
  # Export the results
    gc()
    return(mm2)
}
#-----------------------------------------
# Create matrix with duplicates
mat=matrix(rnorm(1000),nrow=100);mat[,1]=paste0('gene',sample(LETTERS,100,replace=T))
colnames(mat)=c('gene',paste0('sample',1:9))
mm=mat;key_column='gene';.function=max

# Run the function
mm2=dup.matrix(mm,key_column,my.Function=.function)
#-----------------------------------------