Я создал функцию на основе пакета 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)
#-----------------------------------------