broadinstitute / infercnv

Inferring CNV from Single-Cell RNA-Seq
Other
557 stars 164 forks source link

Fail to make final infercnv heatmap #503

Open Cristinex opened 1 year ago

Cristinex commented 1 year ago

Good day to you!

Here is the running log. I tried to uptune the C stack limit but still not OK. I saw there are other posts about this problem. #491 I don't think my dataset is a big one for today's application. Maybe the developers should really think about this problem. ^ ^

Command:
infercnv_obj = infercnv::run(infercnv_obj,cutoff=0.1,out_dir='/dir',cluster_by_groups=T,denoise=T,HMM=F,num_threads=40,plot_step=F)

## Making the final infercnv heatmap ##
INFO [2023-02-14 19:36:14] ::plot_cnv:Start
INFO [2023-02-14 19:36:14] ::plot_cnv:Current data dimensions (r,c)=9359,103869 Total=974788703.946806 Min=0.756344103062436 Max=1.72262116027054.
INFO [2023-02-14 19:36:28] ::plot_cnv:Depending on the size of the matrix this may take a moment.
INFO [2023-02-14 19:37:24] plot_cnv(): auto thresholding at: (0.889518 , 1.110482)
INFO [2023-02-14 19:38:08] plot_cnv_observation:Start
INFO [2023-02-14 19:38:08] Observation data size: Cells= 69633 Genes= 9359
Error: node stack overflow
GeorgescuC commented 1 year ago

Hi @Cristinex ,

How did you proceed to up the C stack limit? It is surprising that the error only occurs on the final plot and not during the preliminary plot.

When this error occurs during plotting, it is due to the "as.dendrogram()" call that converts the hclust of cells to a dendrogram to plot on the left side of the figure. That method is part of base R and uses recursion, so it can run out of stack if their are too many branches in the tree.

I will see if I can write a substitute hclust to dendrogram method that doesn't use recursion, but there are other things I am currently working on that have priority.

Regards, Christophe.

fpengstudy commented 1 year ago

Hi, @GeorgescuC

Frist, thanks for you and your usefool tools!

I also met this problem in my running.

INFO [2023-02-16 16:02:32] ::plot_cnv:Current data dimensions (r,c)=7723,78560 Total=609324271.995433 Min=0.745951259500895 Max=2.5486769324604.
INFO [2023-02-16 16:02:47] ::plot_cnv:Depending on the size of the matrix this may take a moment.
INFO [2023-02-16 16:03:16] plot_cnv(): auto thresholding at: (0.827945 , 1.180643)
INFO [2023-02-16 16:04:05] plot_cnv_observation:Start
INFO [2023-02-16 16:04:05] Observation data size: Cells= 70984 Genes= 7723

> Error: node stack overflow
> In addition: Warning messages:
> 1: Requested number is larger than the number of available items (52). Setting to 52. 
> 2: Requested number is larger than the number of available items (52). Setting to 52. 
> 3: Requested number is larger than the number of available items (52). Setting to 52. 
> 4: Requested number is larger than the number of available items (52). Setting to 52. 
> 5: Requested number is larger than the number of available items (52). Setting to 52. 
> Execution 

I tried your methods in #196 but it did not work

options(expressions=500000)
ulimit -s unlimited

I got your answers in #491 , but I did not know where code: tree() is.

My cells have been clustered. Can I run in batches with different clusters while using the same reference?

Best wishes to you!

Cristinex commented 1 year ago

Hi @GeorgescuC,

I appreciate it a lot for your help and reply!

I set ulimit by ulimit -s unlimited or ulimit -s 32768 at the very beginning of running. Then, I open R to set the options. There was no plot made during the whole process, no preliminary plot either as you expected.

InferCNV is a great and important tool. Thank you for develop and maintain it!!

GeorgescuC commented 1 year ago

Hi @fpengstudy and @Cristinex ,

Just to make sure for @fpengstudy , the "ulimit -s unlimited" command needs to be run in a terminal before starting the R session for it to be taken into account.

For both, if you simply run "ulimit -s" in the terminal, that should output the current limit. Is the limit reported the one you set? The ulimit command may silently fail to change the setting or limit the max value depending on permissions on the machine you are using, or if you are running in a container such as Docker. You can also run "Cstack_info()" within R to see what the effective limit is within your R session.

A potential workaround to get usable plots would be to use the "plot_per_group()" method, it allows to plot each of your samples/annotations on a separate plot, so that would reduce the max size of the trees that infercnv needs to work with. If that alone is not enough, the method includes options to sample results based on a threshold and a sampling rate to further reduce groups that would be too big.

Regards, Christophe.

fpengstudy commented 1 year ago

Hi! @GeorgescuC I appreciate it a lot for your reply! I run "ulimit -s" in the terminal and it showed "unlimited" back to me. I then used "plot_per_group()" afer the result of "no_plot=TRUE" , but it did not work . Error was the same. Maybe it because of my squamous epithelial cells groups are too big. Maybe classification by clustering information after patient or PCA processing is more suitable for me. Thank you again!

Cristinex commented 1 year ago

Hi @fpengstudy & @GeorgescuC,

plot_per_group() function worked for my reference group. So, for @fpengstudy, maybe it was the cell number issue.

However, the plot I got was exactly the same as the issue in #496, and I think that is also the causation of large number of cnv and large stack requirement. Maybe I will try to run again with my leiden clustering scoring function back to modularity or change the current threshold of "CPM" to 0.05.

Regards, Cristine

GeorgescuC commented 1 year ago

Hi @fpengstudy and @Critinex ,

@fpengstudy what does running Cstack_info() within R output? This should help check if R sees the stack limit as it should based on your system settings or if an issue might be happening there. Could you also run options(error = function() traceback(2)) in your R session before trying to plot again? This should show specifically which line/method the error occurs in to double check that it is the dendrogram conversion that is the issue.

@Critinex can you check how many subclusters you have with length(infercnv_obj@tumor_subclusters$subclusters)? That would help confirm if you have the issue I suspected in that other issue.

To inspect the subclusters, the following code generates a modified infercnv object that assigns subclusters to annotations to easily visualize them:

    subcluster_obj = infercnv_obj
    subcluster_obj@reference_grouped_cell_indices = list()
    for (grp in names(infercnv_obj@reference_grouped_cell_indices)) {
        for (grp2 in names(infercnv_obj@tumor_subclusters$subclusters[[grp]])) {
            subcluster_obj@reference_grouped_cell_indices[[grp2]] = infercnv_obj@tumor_subclusters$subclusters[[grp]][[grp2]]
        }
    }

    subcluster_obj@observation_grouped_cell_indices = list()
    for (grp in names(infercnv_obj@observation_grouped_cell_indices)) {
        for (grp2 in names(infercnv_obj@tumor_subclusters$subclusters[[grp]])) {
            subcluster_obj@observation_grouped_cell_indices[[grp2]] = infercnv_obj@tumor_subclusters$subclusters[[grp]][[grp2]]
        }
    }

    subcluster_obj@tumor_subclusters = NULL

You can then plot subcluster_obj, first trying with the regular plot_cnv() method, but if that does not work, I would try to plot again with plot_per_group() but using a different output folder as there might be a lot of files generated if there are a lot of subclusters.

Regards, Christophe.

fpengstudy commented 1 year ago

Hi! @GeorgescuC, Thanks for your reply. Errors still happended. Here were my results according to your suggestions.

Cstack_info()

      size    current  direction eval_depth 
        NA         NA          1          2 

options(error = function() traceback(2))

Error: node stack overflow

        STEP 15: computing tumor subclusters via leiden

INFO [2023-02-19 23:39:30] define_signif_tumor_subclusters(p_val=0.1
INFO [2023-02-19 23:39:35] define_signif_tumor_subclusters(), tumor: Squamous epithelial cells
INFO [2023-02-19 23:49:06] define_signif_tumor_subclusters(), tumor: Macrophages
INFO [2023-02-19 23:49:17] define_signif_tumor_subclusters(), tumor: B cells
INFO [2023-02-19 23:49:23] define_signif_tumor_subclusters(), tumor: T cells
INFO [2023-02-19 23:49:28] define_signif_tumor_subclusters(), tumor: Mast cells
INFO [2023-02-20 00:29:51] ::plot_cnv:Start
INFO [2023-02-20 00:29:51] ::plot_cnv:Current data dimensions (r,c)=7723,78560 Total=609324271.995433 Min=0.745951259500895 Max=2.5486769324604.
INFO [2023-02-20 00:30:06] ::plot_cnv:Depending on the size of the matrix this may take a moment.
INFO [2023-02-20 00:30:36] plot_cnv(): auto thresholding at: (0.827945 , 1.180643)
INFO [2023-02-20 00:31:23] plot_cnv_observation:Start
INFO [2023-02-20 00:31:23] Observation data size: Cells= 70984 Genes= 7723

In addition: Warning messages:
1: Requested number is larger than the number of available items (52). Setting to 52. 
2: Requested number is larger than the number of available items (52). Setting to 52. 
3: Requested number is larger than the number of available items (52). Setting to 52. 
4: Requested number is larger than the number of available items (52). Setting to 52. 
5: Requested number is larger than the number of available items (52). Setting to 52. 
Error during wrapup: node stack overflow
Error: no more error handlers available (recursive errors?); invoking 'abort' restart
GeorgescuC commented 1 year ago

Hi @fpengstudy ,

I have not seen "NA" yet as a return from "CStack_info()". What platform are you running R on?

Can you try installing the attempted fix I made on Github using the following?

install.packages("devtools")
devtools::install_github("broadinstitute/infercnv", ref="test_fix_plot_recursion")

I made a small edit to disable writing the hclust to file as newick strings which requires conversion to a phylo object, which should be the call that results in the recursion.

Regards, Christophe.

Cristinex commented 1 year ago

Hi @GeorgescuC , length(infercnv_obj@tumor_subclusters$subclusters) turned out to be 0. I tried to plot like the method you provided. it turned out to be <sparse>[ <logic> ]: .M.sub.i.logical() maybe inefficient

Besides, when I tried to run like #496 , new issue pop up (TAT) at step 15:

Computing nearest neighbor graph
Computing SNN
INFO [2023-02-22 10:48:05] -mirroring for hspike
INFO [2023-02-22 10:48:05] define_signif_tumor_subclusters(p_val=0.1
INFO [2023-02-22 10:48:06] define_signif_tumor_subclusters(), tumor: spike_tumor_cell_Astrocyte
Error in UseMethod("is.rooted") : 
  no applicable method for 'is.rooted' applied to an object of class "NULL"
In addition: There were 26 warnings (use warnings() to see them)
8: (function () 
   traceback(2))()
7: is.rooted(rooted.tree)
6: get.rooted.tree.height(in_tree)
5: add_single_branch_to_phylo(tmp_full_phylo, colnames(tumor_expr_data)[which(partition == 
       i)])
4: .single_tumor_leiden_subclustering(tumor_group = tumor_group, 
       tumor_group_idx = tumor_group_idx, tumor_expr_data = tumor_expr_data, 
       chrs = chrs, k_nn = k_nn, leiden_resolution = leiden_resolution, 
       leiden_method = leiden_method, leiden_function = leiden_function, 
       hclust_method = hclust_method)
3: define_signif_tumor_subclusters(infercnv_obj@.hspike, p_val = p_val, 
       k_nn = k_nn, leiden_resolution = leiden_resolution, leiden_method = "simple", 
       hclust_method = hclust_method, cluster_by_groups = cluster_by_groups, 
       partition_method = partition_method, per_chr_hmm_subclusters = FALSE, 
       restrict_to_DE_genes = restrict_to_DE_genes)
2: define_signif_tumor_subclusters(infercnv_obj = infercnv_obj, 
       p_val = tumor_subcluster_pval, k_nn = k_nn, leiden_resolution = leiden_resolution, 
       leiden_method = leiden_method, leiden_function = leiden_function, 
       hclust_method = hclust_method, cluster_by_groups = cluster_by_groups, 
       partition_method = tumor_subcluster_partition_method, per_chr_hmm_subclusters = per_chr_hmm_subclusters, 
       z_score_filter = z_score_filter)
1: infercnv::run(infercnv_obj_NF, cutoff = 0.1, out_dir = "/data/home/grp-huangxd/caixiaoxuan/union/singlecell/CellRanger/singlecell/new_analysis/infercnv4_0.1/NF/new", 
       cluster_by_groups = T, denoise = T, HMM = T, num_threads = 40, 
       k_nn = 30, leiden_resolution = 1, leiden_method = "simple", 
       leiden_function = "modularity")

Best Regards, Cristine

GeorgescuC commented 1 year ago

Hi @Cristinex ,

For the length, I forgot to say you should first load the backup object because when run() errors, it does not return the modified object, so you still have the newly created object in R. With output_dir being the folder where you did the first run that errored only during plotting, you can run the following:

final_obj = readRDS(file.path(output_dir, "run.final.infercnv_obj"))
length(final_obj@tumor_subclusters$subclusters)

You can also use this final_obj to try the plotting again.

For the new error you posted, it seems there is an issue with running the subclustering on the hspike (calibrating data for the HMM). I am not sure why it is happening with the combination of settings you have, but I made a change that should prevent any issues from arising there. Can you update your infercnv install with:

install.packages("devtools")
devtools::install_github("broadinstitute/infercnv", ref="test_fix_plot_recursion")

Then run infercnv again?

Regards, Christophe.

Cristinex commented 1 year ago

Hi @GeorgescuC,

Thank you soooo much for your replying. I wonder if there is some downloadable code for me to reinstall? Because I am currently in a place where I am blocked from installing right from github......

Regards, Xiaoxuan

GeorgescuC commented 1 year ago

Hi @Cristinex ,

You can download the code directly from the github website on the same branch if that is an option. Either git clone the repo then checkout to the branch, or download the repo as a zip archive.

zip link: https://github.com/broadinstitute/infercnv/archive/refs/heads/test_fix_plot_recursion.zip

After download the code (and extracting if needed), move to the root of the repo, open an R session and run: install.packages("./", repos=NULL, type="source")

Regards, Christophe.

Cristinex commented 1 year ago

Hi @GeorgescuC,

After I reinstall the package, it processed to further steps. However, the memory problem still exists, which should be something wrong with the output.

The length of subclusters is 9, equaling to the sum of types of cells in reference cell types and tumors.

INFO [2023-02-23 14:10:52] Number of cells in group(7184) is 1
INFO [2023-02-23 14:10:52] Skipping group: 7184, since less than 2 entries
INFO [2023-02-23 14:10:52] Number of cells in group(7185) is 2
INFO [2023-02-23 14:10:52] group size being clustered:  2,9359
INFO [2023-02-23 14:10:52] Number of cells in group(7186) is 1
INFO [2023-02-23 14:10:52] Skipping group: 7186, since less than 2 entries
INFO [2023-02-23 14:10:52] Number of cells in group(7187) is 1
INFO [2023-02-23 14:10:52] Skipping group: 7187, since less than 2 entries
INFO [2023-02-23 14:17:06] plot_cnv_observation:Writing observation groupings/color.
INFO [2023-02-23 14:17:06] plot_cnv_observation:Done writing observation groupings/color.
INFO [2023-02-23 14:17:12] plot_cnv_observation:Writing observation heatmap thresholds.
INFO [2023-02-23 14:17:12] plot_cnv_observation:Done writing observation heatmap thresholds.
Error in rasterImage(as.raster(zc), min(x), min(y), max(x), max(y), interpolate = FALSE) :
  cannot allocate memory block of size 16777216 Tb

Best Regards, Cristine

GeorgescuC commented 1 year ago

Hi @Cristinex ,

This is one of the weird bugs that occasionally occurs... There seems to be a bug somewhere in the code that the R heatmap() method uses. There is no reason why so much memory would be needed and slightly changing some properties of the matrix plotted often does the trick. There are 2 things you can try to work around this:

Regards, Christophe.

fpengstudy commented 1 year ago

Hi @GeorgescuC, Thank you a lot for your quick replying and a new version for infercnv! I used conda to download the "infercnv" before. The platform I used was LINUX. However, When I downloaded the packages I met some problems.

Error in .doLoadActions(where, attach) : 
  error in load action .__A__.1 for package RcppAnnoy: loadModule(module = "AnnoyAngular", what = TRUE, env = ns, loadNow = TRUE): Unable to load module "AnnoyAngular": cannot allocate vector of size 705704.1 Gb
Calls: <Anonymous> ... asNamespace -> loadNamespace -> <Anonymous> -> .doLoadActions
Execution halted
ERROR: lazy loading failed for package ‘infercnv’

I also tried your methods for downloading a zip, but the error also occupied.

Kind regards, Fpeng.

Cristinex commented 1 year ago

Hi @GeorgescuC,

I cannot thank you more for your quick help and useful suggestions. Things run well after reinstalling and using useRaster=FALSE in plot_cnv().

Best Wishes, Cristine

GeorgescuC commented 1 year ago

Hi @fpengstudy ,

I am not sure what is happening there. The issue seems to be with loading RcppAnnoy, which we do not directly use but is used by dependencies. I would first try simply restarting R, and if that does not work, I would try setting up a clean conda environment.

Regards, Christophe.

Cristinex commented 1 year ago

Hi @GeorgescuC,

Thank you for maintaining infercnv! After I finishing running, I cannot find the output of '...dendrogram.txt'. How can I get this file for plotting? Is it correct to use lines like this (from inferCNV_heatmap.R):

final <- readRDS('run.final.infercnv_obj')
obs_dendrogram <- list()
ordered_names <- NULL
isfirst <- TRUE
hcl_obs_annotations_groups <- vector()
obs_seps <- c()
sub_obs_seps <- c()  # never use at this time? available if we want to add splits in the heatmap for subclusters
obs_annotations_names<-names(final@observation_grouped_cell_indices)

            for (i in seq_along(obs_annotations_names)) {
                if (!is.null(final@tumor_subclusters$hc[[ obs_annotations_names[i] ]])) {

                    obs_dendrogram[[i]] = as.dendrogram(final@tumor_subclusters$hc[[ obs_annotations_names[i] ]])
                    ordered_names <- c(ordered_names, final@tumor_subclusters$hc[[ obs_annotations_names[i] ]]$labels[final@tumor_subclusters$hc[[ obs_annotations_names[i] ]]$order])
                    obs_seps <- c(obs_seps, length(ordered_names))
                    hcl_obs_annotations_groups <- c(hcl_obs_annotations_groups, rep(i, length(final@tumor_subclusters$hc[[ obs_annotations_names[i] ]]$order)))

                    if (isfirst) {
                        write.tree(as.phylo(final@tumor_subclusters$hc[[ obs_annotations_names[i] ]]),
                                   file=paste('.', sprintf("%s.observations_dendrogram.txt", 'infercnv'), sep=.Platform$file.sep))
                        isfirst <- FALSE
                    }
                    else {
                        write.tree(as.phylo(final@tumor_subclusters$hc[[ obs_annotations_names[i] ]]),
                                   file=paste('.', sprintf("%s.observations_dendrogram.txt", 'infercnv'), sep=.Platform$file.sep), append=TRUE)
                    }
                }
                else { ## should only happen if there is only 1 cell in the group so the clustering method was not able to generate a hclust
                    #### actually happens with 2 cells only too, because can't cluster 2
                    if ((length(unlist(final@tumor_subclusters$subclusters[[obs_annotations_names[i]]])) == 2) || (length(unlist(final@tumor_subclusters$subclusters[[obs_annotations_names[i]]])) == 1)) {
                        if (length(unlist(final@tumor_subclusters$subclusters[[obs_annotations_names[i]]])) == 2) {
                            obs_dendrogram[[i]] <- .pairwise_dendrogram(colnames(final@expr.data[, unlist(final@tumor_subclusters$subclusters[[obs_annotations_names[i]]]), drop=FALSE]))
                        }
                        else { ## == 1
                            obs_dendrogram[[i]] <- .single_element_dendrogram(colnames(final@expr.data[, unlist(final@tumor_subclusters$subclusters[[obs_annotations_names[i]]]), drop=FALSE]))
                        }
                        ordered_names <- c(ordered_names, colnames(final@expr.data[, unlist(final@tumor_subclusters$subclusters[[obs_annotations_names[i]]]), drop=FALSE]))
                        obs_seps <- c(obs_seps, length(ordered_names))
                        hcl_obs_annotations_groups <- c(hcl_obs_annotations_groups, rep(i, length(unlist(final@tumor_subclusters$subclusters[[obs_annotations_names[i]]]))))
                    }
                    else {
                        flog.error("Unexpected error, should not happen.")
                        stop("Error")
                    }
                }
            }

Kind Regards, Cristine

GeorgescuC commented 1 year ago

Hi @Cristinex ,

The "...dendrogram.txt" is the output I disabled for the attempt to work around the node stack overflow error. You can try running the snippet of code taken from plot_cnv() you shared, but you might run into the error again.

I looked more into where exactly the issue would be arising from in the ape library, and it seems not to be the as.phylo() call as I originally thought, because recursion is only used for the submethod as.phylo.formula not for as.phylo.hclust. The recursion actually seems to happen in write.tree() -> .write.tree2() -> reorderRcpp(), so as.phylo() should work fine.

If you want to use the phylogeny within R, you can replace the write.tree() calls with simply storing the phylo objects in a list. If you prefer to use hclust objects, you can directly take them from the infercnv_obj@tumor_subclusters$hc slot.

Regards, Christophe.

Cristinex commented 1 year ago

Hi @GeorgescuC,

Thank you for your reply.

I used the lines that I selected from your scripts and somehow smoothly generated a "infercnv.observation.dendrogram.txt" from "run.final_infercnv_obj". I am not sure whether it was the right one, though the dendrogram plotted according to it was the same as that on the heatmap drew from run.final_infercnv_obj.

In addition, it was still not available to run the whole process to step 22 unless setting no_plot=T and drawing from reloaded objects. Stopping at step 18, reporting:

Error in rasterImage(as.raster(zc), min(x), min(y), max(x), max(y), interpolate = FALSE) :
  cannot allocate memory block of size 16777216 Tb

Best Regards, Cristine

GeorgescuC commented 1 year ago

Hi @Cristinex ,

The "run.final_infercnv_obj" file is written when the run finishes, so as the run whose results you want finished, it should be the latest version every time.

Did you get that error while using the useRaster=FALSE option? It is also available in the run() method and should be passed to plot_cnv() calls.

Regards, Christophe.

Cristinex commented 1 year ago

Hi @GeorgescuC,

I got error while using useRaster=FALSE in run(). no_plot=T in run() then plot_cnv(obj, useRaster=FALSE) worked for me. ^ ^

Kind Regards, Cristine

GeorgescuC commented 1 year ago

Hi @Cristinex ,

Looking into the code, it turns out step 18 and 19 call plot_cnv() through a different method, and useRaster was not linked there. I have pushed a commit to fix this, but you might also be able to work around the issue by running options("preferRaster" = FALSE) in your R session first, which should hint the image() method not to use rasterization in the cases where the useRaster option is not specified/linked.

Regards, Christophe.

YiweiNiu commented 1 year ago

Hi Christophe,

I tried both infercnv 1.16.0 from bioconductor and infercnv test_fix_plot_recursion, but the "node stack overflow" error still happened.

I tried the default ulimit and ulimit -s unlimited before starting R, and both could not work. The Cstack_info gave NA when using ulimit -s unlimited.

> options(expressions=10000)
> options(error = function() traceback(2))

> Cstack_info()
      size    current  direction eval_depth 
        NA         NA          1          2

> plot_cnv(run.final.infercnv_obj, out_dir='.', out)
INFO [2023-08-28 14:42:18] ::plot_cnv:Start
INFO [2023-08-28 14:42:18] ::plot_cnv:Current data dimensions (r,c)=8873,45044 Total=400940222.339581 Min=0.755879146783192 Max=2.05344326007797.
INFO [2023-08-28 14:42:20] ::plot_cnv:Depending on the size of the matrix this may take a moment.
INFO [2023-08-28 14:42:31] plot_cnv(): auto thresholding at: (0.887767 , 1.118562)
INFO [2023-08-28 14:42:40] plot_cnv_observation:Start
INFO [2023-08-28 14:42:40] Observation data size: Cells= 41544 Genes= 8873
Error: node stack overflow
Error during wrapup: node stack overflow
Error: no more error handlers available (recursive errors?); invoking 'abort' restart

> sessionInfo()
R version 4.3.1 (2023-06-16)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04.2 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so;  LAPACK version 3.10.0

locale:
 [1] LC_CTYPE=C.UTF-8           LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

time zone: Europe/Berlin
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] infercnv_1.15.1 workflowr_1.7.0

loaded via a namespace (and not attached):
  [1] RcppAnnoy_0.0.21            splines_4.3.1              
  [3] later_1.3.1                 bitops_1.0-7               
  [5] tibble_3.2.1                polyclip_1.10-4            
  [7] lifecycle_1.0.3             fastcluster_1.2.3          
  [9] edgeR_3.42.4                doParallel_1.0.17          
 [11] rprojroot_2.0.3             globals_0.16.2             
 [13] processx_3.8.1              lattice_0.21-8             
 [15] MASS_7.3-60                 magrittr_2.0.3             
 [17] limma_3.56.2                plotly_4.10.2              
 [19] rmarkdown_2.22              yaml_2.3.7                 
 [21] httpuv_1.6.11               Seurat_4.3.0.1             
 [23] sctransform_0.3.5           sp_1.6-1                   
 [25] spatstat.sparse_3.0-1       reticulate_1.30            
 [27] cowplot_1.1.1               pbapply_1.7-2              
 [29] RColorBrewer_1.1-3          multcomp_1.4-23            
 [31] abind_1.4-5                 zlibbioc_1.46.0            
 [33] Rtsne_0.16                  GenomicRanges_1.52.0       
 [35] purrr_1.0.1                 BiocGenerics_0.46.0        
 [37] RCurl_1.98-1.12             TH.data_1.1-2              
 [39] sandwich_3.0-2              git2r_0.32.0               
 [41] GenomeInfoDbData_1.2.10     IRanges_2.34.1             
 [43] S4Vectors_0.38.1            ggrepel_0.9.3              
 [45] irlba_2.3.5.1               listenv_0.9.0              
 [47] spatstat.utils_3.0-3        goftest_1.2-3              
 [49] spatstat.random_3.1-5       fitdistrplus_1.1-11        
 [51] parallelly_1.36.0           leiden_0.4.3               
 [53] codetools_0.2-19            coin_1.4-2                 
 [55] DelayedArray_0.26.7         tidyselect_1.2.0           
 [57] futile.logger_1.4.3         rjags_4-14                 
 [59] matrixStats_1.0.0           stats4_4.3.1               
 [61] spatstat.explore_3.2-1      jsonlite_1.8.5             
 [63] ellipsis_0.3.2              progressr_0.14.0           
 [65] ggridges_0.5.4              survival_3.5-5             
 [67] iterators_1.0.14            foreach_1.5.2              
 [69] tools_4.3.1                 ica_1.0-3                  
 [71] Rcpp_1.0.10                 glue_1.6.2                 
 [73] gridExtra_2.3               xfun_0.39                  
 [75] MatrixGenerics_1.12.3       GenomeInfoDb_1.36.1        
 [77] dplyr_1.1.2                 formatR_1.14               
 [79] fastmap_1.1.1               fansi_1.0.4                
 [81] callr_3.7.3                 caTools_1.18.2             
 [83] digest_0.6.31               parallelDist_0.2.6         
 [85] R6_2.5.1                    mime_0.12                  
 [87] colorspace_2.1-0            scattermore_1.2            
 [89] gtools_3.9.4                tensor_1.5                 
 [91] spatstat.data_3.0-1         utf8_1.2.3                 
 [93] tidyr_1.3.0                 generics_0.1.3             
 [95] data.table_1.14.8           httr_1.4.6                 
 [97] htmlwidgets_1.6.2           S4Arrays_1.0.5             
 [99] whisker_0.4.1               uwot_0.1.16                
[101] pkgconfig_2.0.3             gtable_0.3.3               
[103] modeltools_0.2-23           lmtest_0.9-40              
[105] SingleCellExperiment_1.22.0 XVector_0.40.0             
[107] htmltools_0.5.5             SeuratObject_4.1.3         
[109] scales_1.2.1                Biobase_2.60.0             
[111] png_0.1-8                   phyclust_0.1-33            
[113] knitr_1.43                  lambda.r_1.2.4             
[115] rstudioapi_0.14             reshape2_1.4.4             
[117] coda_0.19-4                 nlme_3.1-162               
[119] zoo_1.8-12                  stringr_1.5.0              
[121] KernSmooth_2.23-21          parallel_4.3.1             
[123] miniUI_0.1.1.1              libcoin_1.0-9              
[125] pillar_1.9.0                grid_4.3.1                 
[127] vctrs_0.6.2                 gplots_3.1.3               
[129] RANN_2.6.1                  promises_1.2.0.1           
[131] xtable_1.8-4                cluster_2.1.4              
[133] evaluate_0.21               locfit_1.5-9.8             
[135] mvtnorm_1.2-2               cli_3.6.1                  
[137] compiler_4.3.1              futile.options_1.0.1       
[139] rlang_1.1.1                 crayon_1.5.2               
[141] future.apply_1.11.0         ps_1.7.5                   
[143] getPass_0.2-2               argparse_2.2.2             
[145] plyr_1.8.8                  fs_1.6.2                   
[147] stringi_1.7.12              viridisLite_0.4.2          
[149] deldir_1.0-9                munsell_0.5.0              
[151] lazyeval_0.2.2              spatstat.geom_3.2-1        
[153] Matrix_1.6-1                patchwork_1.1.3            
[155] future_1.32.0               ggplot2_3.4.2              
[157] shiny_1.7.4                 SummarizedExperiment_1.30.2
[159] ROCR_1.0-11                 igraph_1.4.3               
[161] RcppParallel_5.1.7          ape_5.7-1 

I was wondering if there is any workaround for this. Thank you for your help.

Best regards, Yiwei