Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tweak print method to show altExpNames #85

Closed
wants to merge 5 commits into from
Closed
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 42 additions & 47 deletions R/print_method.R
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# This file is a replacement of the unexported functions in the tibble package, in order to specify "tibble abstraction in the header"
# This file is a replacement of the unexported functions in the tibble
# package, in order to specify "tibble abstraction in the header"

#' @name tbl_format_header
#' @rdname tbl_format_header
Expand All @@ -13,62 +14,56 @@
#' @importFrom pillar style_subtle
#' @importFrom pillar tbl_format_header
#' @export
tbl_format_header.tidySingleCellExperiment <- function(x, setup, ...){

number_of_features = x |> attr("number_of_features")
assay_names = x |> attr("assay_names")

named_header <- setup$tbl_sum

# Change name
names(named_header) = "A SingleCellExperiment-tibble abstraction"

if (all(names2(named_header) == "")) {
header <- named_header
}
else {
header <-
paste0(
align(paste0(names2(named_header), ":"), space = NBSP),
" ",
named_header
) %>%

# Add further info single-cell
append(sprintf(
"\033[90m Features=%s | Cells=%s | Assays=%s\033[39m",
number_of_features,
nrow(x),
assay_names %>% paste(collapse=", ")
), after = 1)
}

style_subtle(pillar___format_comment(header, width = setup$width))

tbl_format_header.tidySingleCellExperiment <- function(x, setup, ...) {

number_of_features <- x |> attr("number_of_features")
assay_names <- x |> attr("assay_names")
altExpNames <- x |> attr("altExpNames")

# Change name
named_header <- setup$tbl_sum
names(named_header) <- "A SingleCellExperiment-tibble abstraction"

if (all(names2(named_header) == "")) {
header <- named_header
} else {
header <- paste0(
align(paste0(names2(named_header), ":"), space=NBSP),
" ", named_header) %>%
# Add further info single-cell
append(sprintf(
"\033[90m Features=%s | Cells=%s | Assays=%s | altExpNames=%s\033[39m",
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks.

I bit more elegant would be

  • Replace altExpNames with Assays_alternative
  • Conditionally add "| altExpNames=%s" if alternative experiment exists

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair point. I had considered adding the information on a conditional basis but personally I prefer to know even if it's empty. The standard SCE print method outputs altExpNames(0): when empty and altExpNames(1): Antibody Capture when it is populated (Antibody Capture being the name of the alternative experiment and can be any string). If you feel you would rather keep it only when it is non-NULL I can do that quite easily.
In relation to the naming, it actually refers to the name of the experiment rather than the names of the assays, i.e. if it exists you will still have counts and normcounts or other as the assay names within the altExp slot. How about saying Other_experiments=?
I will also add the unit tests and other missing bits whilst I am at it.

Thanks.

Copy link
Owner

@stemangiola stemangiola Aug 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see.

let's try to generalise the concept of experiment and assay, still hinting at the non-modular nature of singlecellexperiment.

So I am in favour of printing the experiments within the object, if they are 1,2,3, independently whether they are base or alternative.

having said that, there are a lot of ways to go about that. One possibility is to do

Assays= base:counts,logcounts; Antibody capture:counts,logcounts; ADT:counts

Other ideas are welcome!

Copy link
Owner

@stemangiola stemangiola Aug 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Biomiha, I realised that the sentence "OK, the goal here is to provide an interface that promotes modularity. " sounded very bad in writing; the tone I was thinking was completely different from how you would read it!

I used a poor form to give the broad indication that "the tidy transcriptomics thrives to giving modularity (which sometimes diverges from the Bioc framework)."

I hope you did not take it personally!

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No dude, absolutely not. I work in biotech 😄 .
I agree with what you've said. Am working on implementation, just been very busy lately.

number_of_features, nrow(x),
paste(assay_names, collapse=", "),
if(length(nchar(altExpNames)) > 0) paste(altExpNames, collapse=", ") else {"NULL"}
), after=1)
}
style_subtle(pillar___format_comment(header, width=setup$width))
}

#' @name formatting
#' @rdname formatting
#' @aliases print
#' @inherit tibble::formatting
#' @return Prints a message to the console describing
#' the contents of the `tidySingleCellExperiment`.
#'
#' @examples
#' data(pbmc_small)
#' print(pbmc_small)
#'
#' @importFrom vctrs new_data_frame
#' @importFrom SummarizedExperiment assayNames
#' @importFrom SingleCellExperiment altExpNames
#' @export
print.SingleCellExperiment <- function(x, ..., n = NULL, width = NULL) {#, n_extra = NULL) {
# TODO: argument 'n_extra' seems to not
# exist anymore; see ?tibble::print.tbl

x |>
as_tibble(n_dimensions_to_return = 5 ) |>

new_data_frame(class = c("tidySingleCellExperiment", "tbl")) %>%
add_attr( nrow(x), "number_of_features") %>%
add_attr( assays(x) %>% names , "assay_names") %>%

print()

invisible(x)
print.SingleCellExperiment <- function(x, ..., n=NULL, width=NULL) {
x |>
as_tibble(n_dimensions_to_return=5) |>
new_data_frame(class=c("tidySingleCellExperiment", "tbl")) %>%
add_attr(nrow(x), "number_of_features") %>%
add_attr(assayNames(x), "assay_names") %>%
add_attr(altExpNames(x), "altExpNames") %>%
print()

invisible(x)
}