我正在重新运行两年前的代码,它使用一个已经弃用的软件包tcR软件来执行T细胞受体/免疫球蛋白的谱系分析。
当我调用一个计算两个曲目之间的morisita相似性指数的函数时,我面临着一个问题(之前的代码工作得很好):这里我使用单个T细胞受体序列及其频率的数据集的列表来计算Morisita相异指数。
> repOverlap(list, 'morisita', 'nuc', .norm = F, .verbose = F)
Error: `vars` must be a character vector.
Run `rlang::last_error()` to see where the error occurred.
> rlang::last_error()
<error/rlang_error>
`vars` must be a character vector.
Backtrace:
1. tcR::repOverlap(l, "morisita", "nuc", .norm = F, .verbose = F)
4. dplyr::grouped_df(...)
Run `rlang::last_trace()` to see the full context.
> rlang::last_trace()
<error/rlang_error>
`vars` must be a character vector.
Backtrace:
x
1. \-tcR::repOverlap(l, "morisita", "nuc", .norm = F, .verbose = F)
2. +-base::as.data.frame(...)
3. +-dplyr::summarise(...)
4. \-dplyr::grouped_df(...)我有一种感觉,那一定是因为与我上次使用代码以来更新的包不兼容,但经过大量的谷歌搜索和尝试更新/重新安装东西,这个问题不会得到解决。
有没有人有主意?如果它有帮助,这里是上面提到的tcR包的repOverlap函数的路径:https://rdrr.io/cran/tcR/src/R/repoverlap.R (和https://rdrr.io/cran/tcR/src/R/measures.R用于morisita函数)和会话信息:
sessionInfo()
R version 3.5.3 (2019-03-11)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] tcR_2.2.4 igraph_1.2.4 reshape2_1.4.3 gridExtra_2.3 dplyr_1.0.7 ggplot2_3.1.0
loaded via a namespace (and not attached):
[1] Rcpp_1.0.1 ggpubr_0.2 pillar_1.6.1 compiler_3.5.3 plyr_1.8.4 tools_3.5.3
[7] lifecycle_1.0.0 tibble_3.1.3 gtable_0.3.0 pkgconfig_2.0.2 rlang_0.4.11 DBI_1.0.0
[13] rstudioapi_0.10 yaml_2.2.0 parallel_3.5.3 withr_2.1.2 stringr_1.4.0 generics_0.0.2
[19] vctrs_0.3.8 grid_3.5.3 tidyselect_1.1.1 data.table_1.14.0 glue_1.4.2 R6_2.4.0
[25] fansi_0.4.0 purrr_0.3.2 magrittr_1.5 scales_1.0.0 ellipsis_0.3.2 stringdist_0.9.5.2
[31] assertthat_0.2.1 colorspace_1.4-1 utf8_1.1.4 stringi_1.4.3 lazyeval_0.2.2 munsell_0.5.0
[37] crayon_1.3.4发布于 2021-08-01 11:54:34
问题所在
这个错误似乎是在repoverlap.R#136中抛出的,乍一看没有任何意义。但是,查看您的sessionInfo()会发现tcR包已经过时了。有一个change in 2.3修改了这部分代码
## version 2.2.4
grouped_df(
data.frame(...),
vars = list(as.name("Sequence"))
)在grouped_df()的vars参数中使用字符(而不是名称)。
## version 2.3, Jun 7 2020
grouped_df(
data.frame(...),
vars = "Sequence"
)旧版本将抛出问题中提到的完全相同的错误消息
dplyr::grouped_df(mtcars, list(as.name("am")))
#> Error: `vars` must be a character vector.
packageVersion("dplyr")
#> [1] ‘1.0.5’修复方法
tcR已经不在CRAN上了,但我建议你从github更新包,看看问题是否仍然存在。
remotes::install_github("imminfo/tcr")或者,您可以切换到“后继包”immunarch,它在CRAN上并仍在维护。有关更多详细信息,请参阅imminfo/tcr/README.md。
怎么会出这事?
我在这里猜测,但将重新制定这一部分,一旦修复被确认。
基本上,dplyr最近的一些变化打破了tcR 2.2.4中的逻辑。tcR在2.3中修复了此问题。您可能运行了update.packages(),它更新了dplyr,但没有更新tcR,因为tcR不再位于CRAN上。因此,这两个包版本不再兼容。
https://stackoverflow.com/questions/68609775
复制相似问题