Ошибка ggadjustedcurves: необходимо использовать вектор в '[', а не объект матрицы классов - PullRequest
1 голос
/ 21 марта 2019

ggadjustedcurves error: должен использовать вектор в '[', а не объект матрицы классов

Я вызываю rlang::last_trace() и получаю это:

> rlang::last_error()
<error>
message: Must use a vector in `[`, not an object of class matrix.
class:   `rlang_error`
backtrace:
  1. survminer::ggadjustedcurves(...)
  2. survminer:::ggadjustedcurves.average(data, fit, variable, size = size)
  4. base::sort.default(unique(data[, variable]))
  8. base::order(x, na.last = na.last, decreasing = decreasing)
  9. base::lapply(z, function(x) if (is.object(x)) as.vector(xtfrm(x)) else x)
 10. base:::FUN(X[[i]], ...)
 13. base::xtfrm.default(x)
 15. base::rank(x, ties.method = "min", na.last = "keep")
 17. tibble:::`[.tbl_df`(x, !nas)
 18. tibble:::check_names_df(i, x)

Попытка построить скорректированные кривыеиспользуя переменную страты.

1 Ответ

2 голосов
/ 22 марта 2019

У меня очень похожая проблема, но когда я сгенерировал примерный набор данных для публикации, графики работают так, что я думаю, что проблема связана с моими данными.Вот воспроизводимый пример, в котором оба графика хорошо генерируются.

# generate reproducible data set
set.seed(3)
sampleData <- data.frame(Has_an_A_allele = sample(c("Yes", "No"), 1000, replace = TRUE),
                         Survival = rexp(1000, 0.5),
                         Censored = as.numeric(sample(c("1", "0"), 1000, replace = TRUE)),
                         Disease = sample(c("A", "B"), 1000, replace = TRUE),
                         Gender = sample(c("Male", "Female"), 1000, replace = TRUE),
                         Stage = sample(c("Early", "Advanced"), 1000, replace = TRUE),
                         Age = sample(c("Under 60", "Over 60"), 1000, replace = TRUE))
Summary(sampleData)

# create survival fit
fit<-survfit(Surv(Survival, Censored) ~ Has_an_A_allele, data = sampleData)

# create survival plot with p value
ggsurvplot(fit5, sampleData, xlim = c(0, 10), break.time.by = 2, pval = TRUE)

# create faceted survival plot with p value
ggsurvplot(fit5, sampleData, xlim = c(0, 10), break.time.by = 2, facet.by = "Disease", pval = TRUE)

Когда я запускаю этот код на моих данных, первый график работает хорошо, но граненый график возвращает эту ошибку

> ggsurvplot(fit4, x1502, xlim = c(0, 10), break.time.by = 2, facet.by = "Gender", pval = TRUE)
Error: Must use a vector in `[`, not an object of class matrix.
Call `rlang::last_error()` to see a backtrace
> rlang::last_error()
<error>
message: Must use a vector in `[`, not an object of class matrix.
class:   `rlang_error`
backtrace:
  1. survminer::ggsurvplot(...)
  4. survminer::surv_group_by(data, grouping.vars = facet.by)
  5. survminer:::.levels(data[, grouping.vars])
  6. base::as.factor(x)
  7. base::factor(x)
  8. base::order(y)
  9. base::lapply(z, function(x) if (is.object(x)) as.vector(xtfrm(x)) else x)
 10. base:::FUN(X[[i]], ...)
 13. base::xtfrm.default(x)
 15. base::rank(x, ties.method = "min", na.last = "keep")
 17. tibble:::`[.tbl_df`(x, !nas)
 18. tibble:::check_names_df(i, x)

Имена столбцов, используемые в данных примера, идентичны именам в моем наборе данных, и типы данных одинаковы, т. Е. Все столбцы, кроме Survival и Censored, являются факторами.

EDIT

Я исправил это, решив, что это определенно проблема с данными. Я посмотрел на структуру выборочных данных и свои данные.

> str(x1502)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   450 obs. of  7 variables:

> str(sampleData)
'data.frame':   1000 obs. of  7 variables:

Поэтому я использовал x1502 <- as.data.frame(x1502) для преобразования моих данных вфрейм данных, и теперь все работает хорошо.Надеюсь, это сработает для ваших данных.

...