Как исправить повторяющиеся имена столбцов, препятствующие запуску plot_cells(cds)?

  1. Резюме проблемы

Я использую пакет monocle3 для анализа RNA-seq. После создания компакт-дисков с помощьюnew_cell_data_set() чтобы объединить три файла.csv (см. код ниже), я пытаюсь использовать plot_cells() функция, но это сообщение об ошибке продолжает появляться:

Error: Column name `sample_name` must not be duplicated.

Я запускаю rlang::last_trace() и получаю результат:

> rlang::last_trace()
x
+-<error/tibble_error_column_names_must_be_unique>
| Column name `sample_name` must not be duplicated.
\-<error/vctrs_error_names_must_be_unique>
  Names must be unique.
Backtrace:
     x
  1. \-monocle3::plot_cells(cds)
  2.   \-`%>%`(...)
  3.     +-base::withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
  4.     \-base::eval(quote(`_fseq`(`_lhs`)), env, env)
  5.       \-base::eval(quote(`_fseq`(`_lhs`)), env, env)
  6.         \-monocle3:::`_fseq`(`_lhs`)
  7.           \-magrittr::freduce(value, `_function_list`)
  8.             \-function_list[[i]](value)
  9.               +-dplyr::group_by(., cell_group)
 10.               \-dplyr:::group_by.data.frame(., cell_group)
 11.                 \-dplyr::grouped_df(groups$data, groups$group_names, .drop)
 12.                   \-dplyr:::compute_groups(data, vars, drop = drop)
 13.                     +-tibble::as_tibble(data)
 14.                     \-tibble:::as_tibble.data.frame(data)
 15.                       \-tibble:::lst_to_tibble(unclass(x), .rows, .name_repair)
 16.                         \-tibble:::set_repaired_names(x, .name_repair)
 17.                           +-rlang::set_names(...)
 18.                           \-tibble:::repaired_names(...)
 19.                             +-tibble:::subclass_name_repair_errors(...)
 20.                             | \-base::withCallingHandlers(...)
 21.                             \-vctrs::vec_as_names(...)
 22.                               \-(function () ...
 23.                                 \-vctrs:::validate_unique(names = names, arg = arg)
 24.                                   \-vctrs:::stop_names_must_be_unique(names, arg)
 25.                                     \-vctrs:::stop_names(...)
 26.                                       \-vctrs:::stop_vctrs(class = c(class, "vctrs_error_names"), ...)
  1. Что я пробовал

Основываясь на том, что я обнаружил при исследовании проблемы в Google/stackru, я попытался проверить дублирующиеся имена на компакт-дисках (сообщите мне, есть ли более эффективные способы проверки дублированных имен столбцов), используя приведенный ниже код (вывод включен).

> duplicated(cds)
LogicalList of length 55
[[1]] logical(0)
[[2]] logical(0)
[[3]] logical(0)
[[4]] logical(0)
[[5]] logical(0)
[[6]] logical(0)
[[7]] logical(0)
[[8]] logical(0)
[[9]] logical(0)
[[10]] logical(0)
...
<45 more elements>
> anyDuplicated(cds)
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[10] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[28] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[46] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[55] FALSE
> anyDuplicated(cds, fromLast = TRUE)
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[10] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[28] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[46] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[55] FALSE

Я также проверил pData(cds), и есть только одно имя столбца с именем "sample_name" из 59 столбцов.

Приведенный ниже код казался запущенным, но то же сообщение об ошибке появилось, когда я запустил plot_cells(cds), и когда я еще раз проверил pData(cds), имя столбца по-прежнему было "sample_name", поэтому я не уверен, внесены ли изменения.

names(cds)[names(cds) == "sample_name"] <- "sample"

Кроме того, я попробовал более конкретную версию plot_cells(), а ниже - аналогичное, но другое сообщение об ошибке на выходе:

> plot_cells(cds,color='cell_type_designation_label',show_trajectory_graph=FALSE,label_cell_groups=FALSE)
            Error: `data` must be uniquely named but has duplicate columns
> rlang::last_trace()
        <error/rlang_error>
        `data` must be uniquely named but has duplicate columns
        Backtrace:
             x
          1. +-(function (x, ...) ...
          2. \-ggplot2:::print.ggplot(x)
          3.   +-ggplot2::ggplot_build(x)
          4.   \-ggplot2:::ggplot_build.ggplot(x)
          5.     \-ggplot2:::by_layer(function(l, d) l$compute_aesthetics(d, plot))
          6.       \-ggplot2:::f(l = layers[[i]], d = data[[i]])
          7.         \-l$compute_aesthetics(d, plot)
          8.           \-ggplot2:::f(..., self = self)
          9.             \-ggplot2:::scales_add_defaults(...)
         10.               \-base::lapply(aesthetics[new_aesthetics], eval_tidy, data = data)
         11.                 \-rlang:::FUN(X[[i]], ...)

colnames(cds) показывает, что каждый столбец назван в честь гена, и, поскольку существует более 1000 генов, я не знаю простейшего способа проверки дубликатов (которых не должно быть).

pData(cds)$sample_name показывает специфический тег для каждой ячейки, а их также более 1000, что затрудняет поиск дубликатов.

Для справки,

> dim(cds)
[1]    55 14771

Поэтому я думаю, что определенно есть проблемы с дублированием столбцов / имен столбцов, но я не знаю, где искать на компакт-дисках, чтобы определить, где дублируются столбцы, а также как это исправить. Заранее спасибо!

  1. Использован дополнительный код

Ниже приведен код, используемый для объединения трех файлов.csv для создания набора new_cell_data_set. Должно произойти некоторое выравнивание по столбцам / строкам, чтобы метки соответствовали функциям.

cds <- new_cell_data_set(expression_data = expression_matrix_2,
                                 cell_metadata = cell_metadata,
                                 gene_metadata = gene_annotation)

2 ответа

Это вызвано тем, что тип некоторых столбцов метаданных не очень хорошо работает с Monocle.

Распечатать

      pData(cds)

и проверьте тип столбцов метаданных. У меня была эта ошибка, когда два столбца были импортированы как матрица, а не вектор (фактор, символ или число в порядке).

Просто делать

      pData(cds)$column_name <- factor(pData(cds)$column_name)

Должно решить проблему.

Или, если вам не нужны метаданные, просто удалите их.

      pData(cds) <- NULL

Пусть у ваших данных есть одно имя столбца 'sample_name', просто удалите его

Другие вопросы по тегам