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 all 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
17 changes: 11 additions & 6 deletions R/print_method.R
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ 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
Expand All @@ -30,11 +31,12 @@ tbl_format_header.tidySingleCellExperiment <- function(x, setup, ...) {
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),
paste(assay_names, collapse=", ")
), after=1)
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))
}
Expand All @@ -52,14 +54,17 @@ tbl_format_header.tidySingleCellExperiment <- function(x, setup, ...) {
#'
#' @importFrom vctrs new_data_frame
#' @importFrom SummarizedExperiment assayNames
#' @importFrom SingleCellExperiment altExpNames
#' @export
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)
}
}