-
Notifications
You must be signed in to change notification settings - Fork 45
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
error in convert.consensus.tree.clone.to.branch #57
Comments
Hey, I am having the same problem! did you figure out what is wrong? I appreciate of you could share your solution with me. Thanks |
Do you get that error when you try the function on multiple samples or single sample? I was running into that error message when I had one sample. Here he suggested a solution that worked for me! |
Nop. I started using Pairtree. https://github.com/morrislab/pairtree
Good luck
…On Sun, 4 Dec 2022, 11:26 am Shaghayegh Soudi (PhD), < ***@***.***> wrote:
Do you get that error when you try the function on multiple samples or
single sample? I was running into that error message when I had one sample.
—
Reply to this email directly, view it on GitHub
<#57 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACRLYSEPZA6DOVAUHXVWM2LWLPQLVANCNFSM6AAAAAASIV2Z3Q>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
For single samples #38 is a viable work-around but if you need to solve this for multiple samples and absolutely need to use this tool for your analysis (instead of moving to a tool like pairtree) you can Monkey Patch the offending function to remove the line causing the issue. The offending set operation on the dataframe doesn't appear to be used elsewhere in ClonEvol and removing it allowed me to run this fine without issue. library(clonevol)
# Monkey patch the cross.rule.score() function in the clonevol package so that
# an error in scoring concensus models doesn't crash the application
# monkey patch for R came from this blog post https://dlukes.github.io/monkey-patching-in-r.html
# this SO post https://stackoverflow.com/a/42036069/2892199 does not resolve the issue
# and storing `clone.ccf.combined.p` isn't used elsewhere so it can just be `NA`
#########################################################################
cross.rule.score <- function(x, meta.p.method = "fisher", exhaustive.mode = FALSE,
rank = TRUE, boot = NULL) {
if (!is.null(x$matched) && x$num.matched.models > 0 && ncol(x$matched$index) > 1) {
if (!is.null(x$matched$trimmed.merged.trees)) {
cat("WARN: pruned trees found. pruneConsensusTrees must be rerun.\n")
}
samples <- names(x$models)
num.models <- nrow(x$matched$index)
x$matched$scores$max.clone.ccf.combined.p <- NA
x$matched$clone.ccf.pvalues <- list()
# foreach matched model, recalc score by combining p values across
# samples for each clone
for (i in 1:num.models) {
trees <- NULL
t <- x$match$merged.trees[[i]]
p <- NULL
for (s in samples) {
mi <- x$models[[s]][[x$match$index[i, s]]]
mi <- mi[!mi$excluded & !is.na(mi$parent), c("lab", "p.value")]
colnames(mi) <- c("lab", s)
if (is.null(p)) {
p <- mi
} else {
p <- merge(p, mi, all = TRUE)
}
}
# ppp <<- p
if (ncol(p) == 2) { # single sample
p$cmb.p <- apply(p[, c(2, 2)], 1, clonevol:::combine.p, method = meta.p.method)
} else {
p$cmb.p <- apply(p[, -1], 1, clonevol:::combine.p, method = meta.p.method)
}
# model score = max (combined p of each clone)
x$matched$scores$max.clone.ccf.combined.p[i] <- max(p$cmb.p)
# this is never used elsewhere and tanks the whole plotting
x$matched$merged.trees[[i]]$clone.ccf.combined.p <- NA
# save the whole pvalue matrix
x$matched$clone.ccf.pvalues[[i]] <- p
}
# order matched models by new score
idx <- seq(1, nrow(x$matched$scores))
if (rank) {
idx <- order(x$matched$scores$max.clone.ccf.combined.p)
}
x$matched$index <- x$matched$index[idx, , drop = FALSE]
x$matched$scores <- x$matched$scores[idx, , drop = FALSE]
x$matched$probs <- x$matched$probs[idx, , drop = FALSE]
# order merged trees
tmp <- list()
for (i in idx) {
tmp <- c(tmp, list(x$matched$merged.trees[[i]]))
}
x$matched$merged.trees <- tmp
# order merged traces
tmp <- list()
for (i in idx) {
tmp <- c(tmp, list(x$matched$merged.traces[[i]]))
}
x$matched$merged.traces <- tmp
# order pvalues
tmp <- list()
for (i in idx) {
tmp <- c(tmp, list(x$matched$clone.ccf.pvalues[[i]]))
}
x$matched$clone.ccf.pvalues <- tmp
# remove previous obsolete model scores (which was very small probability)
# x$matched$scores$model.prob = x$matched$scores$model.score
# x$matched$scores$model.score = NULL
}
return(x)
}
assignInNamespace("cross.rule.score", cross.rule.score, "clonevol")
######################################################################### |
Hello, I am running clonevol and 'infer.clonal.models' identified 6 consensus models and Number of unique pruned consensus trees: 1. Next step 'transfer.events.to.consensus.trees' works fine.
I get following error in the next steps. any idea how to solve it? thanks
y <- convert.consensus.tree.clone.to.branch(y, branch.scale = 'sqrt')
Error in
$<-.data.frame
(*tmp*
, "samples.with.nonzero.cell.frac", value = character(0)) :replacement has 0 rows, data has 5
The text was updated successfully, but these errors were encountered: