Как объединить функцию с data.table, когда я создаю персональный пакет R без сообщения об ошибке? - PullRequest
1 голос
/ 29 марта 2019

Я создал функцию на основе пакета data.table R для обработки матрицы с дубликатами.

Я уже запустил свой код в R studio и обнаружил, что он работает правильно. Поэтому я создал пакет R с использованием пакетов roxygen2 и devtools R.

К сожалению, при подключении библиотеки и запуске функции показывалось следующее сообщение об ошибке.

Ошибка в .subset (x, j): недопустимый тип индекса 'list'

Как мне решить проблему?

Функция

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)
#-----------------------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...