Как исправить повторяющиеся имена столбцов, препятствующие запуску plot_cells(cds)?
- Резюме проблемы
Я использую пакет 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"), ...)
- Что я пробовал
Основываясь на том, что я обнаружил при исследовании проблемы в 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
Поэтому я думаю, что определенно есть проблемы с дублированием столбцов / имен столбцов, но я не знаю, где искать на компакт-дисках, чтобы определить, где дублируются столбцы, а также как это исправить. Заранее спасибо!
- Использован дополнительный код
Ниже приведен код, используемый для объединения трех файлов.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', просто удалите его