library(knitr); library(ascii); yml<-yaml::yaml.load_file("./SummarizeObject.yml"); fn<-yml$file; nm<-sapply(strsplit(fn, '/'), function(x) rev(x)[1]); nm<-substr(nm, 1, sapply(gregexpr('\\.', nm), function(x) x[length(x)])-1); names(fn)<-nm;
This is an R Markdown document that summarizes a set of table-like R objects. It reports the types (data.frame, matrix, GRanges, etc.), field names, field classes, and summary of field values for each object.
summaryObj<-function(fn) { print(fn); obj<-readRDS(fn); cll<-class(obj); if (cll=='GRanges') obj<-as.data.frame(elementMetadata(obj)); if (cll=='matrix' | cll=='data.frame') { n1<-nrow(obj); n2<-ncol(obj); nm<-colnames(obj); fld<-lapply(1:ncol(obj), function(i) obj[, i]); cnt<-sapply(fld, function(x) length(x[!is.na(x) & x!=''])); fld<-lapply(fld, function(x) sort(unique(as.vector(x)))); fld<-lapply(fld, function(x) x[!is.na(x) & x!='']); names(fld)<-nm; cls<-sapply(fld, class); val<-t(sapply(fld, function(x) x[c(1, ceiling(length(x)/2), length(x))])); colnames(val)<-c('First', 'Middle', 'Last'); tbl<-data.frame(Class=cls, Count=cnt, Level=sapply(fld, length), val, stringsAsFactors = FALSE); rownames(tbl)<-gsub('\\.', '_', rownames(tbl)); colnames(tbl)<-gsub('\\.', '_', colnames(tbl)); rownames(tbl)<-gsub('[_]+', '_', rownames(tbl)); colnames(tbl)<-gsub('[_]+', '_', colnames(tbl)); } else { n1<-0; n2<-0; fld<-list(); tbl<-data.frame(); } list(class=cll, num.entry=n1, num.field=n2, field=fld, table=tbl); } smm<-lapply(fn, summaryObj); names(smm)<-names(fn);
Summary of all files in a single table (each row represents a file):
tbl<-t(sapply(smm, function(x) x[1:3])); dimnames(tbl)<-list(names(smm), c('Data_type', 'Num_Entry', 'Num_Field')); info<-file.info(fn); tbl<-data.frame(File_size=format(info[, 'size'], big.mark = ','), tbl, Modify_time=as.character(info[, 'mtime'])); kable(tbl);
Summary of individual files in separate tables (each row represents a field):
lns<-lapply(names(smm), function(nm) { hd<-paste('## File name: **_', nm, '_**', sep=''); ln<-as.list(kable(smm[[nm]]$table)); c(hd, '\n', ln, '\n\n', "<div align='right'>**_[Go back to project home](", yml$home, ")_**</div> ", '***\n'); }); lns<-do.call('c', lns); lns<-paste(lns, collapse='\n');
r lns
END OF DOCUMENT
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.