首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >旧的R代码现在给出了一个错误:`vars`必须是一个字符向量

旧的R代码现在给出了一个错误:`vars`必须是一个字符向量
EN

Stack Overflow用户
提问于 2021-08-01 11:06:22
回答 1查看 57关注 0票数 1

我正在重新运行两年前的代码,它使用一个已经弃用的软件包tcR软件来执行T细胞受体/免疫球蛋白的谱系分析。

当我调用一个计算两个曲目之间的morisita相似性指数的函数时,我面临着一个问题(之前的代码工作得很好):这里我使用单个T细胞受体序列及其频率的数据集的列表来计算Morisita相异指数。

代码语言:javascript
复制
> 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函数)和会话信息:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-01 11:54:34

问题所在

这个错误似乎是在repoverlap.R#136中抛出的,乍一看没有任何意义。但是,查看您的sessionInfo()会发现tcR包已经过时了。有一个change in 2.3修改了这部分代码

代码语言:javascript
复制
## version 2.2.4
grouped_df(
  data.frame(...),
  vars = list(as.name("Sequence"))
)

grouped_df()vars参数中使用字符(而不是名称)。

代码语言:javascript
复制
## version 2.3, Jun 7 2020 
grouped_df(
  data.frame(...),
  vars = "Sequence"
)

旧版本将抛出问题中提到的完全相同的错误消息

代码语言:javascript
复制
dplyr::grouped_df(mtcars, list(as.name("am")))
#> Error: `vars` must be a character vector.
packageVersion("dplyr")
#> [1] ‘1.0.5’

修复方法

tcR已经不在CRAN上了,但我建议你从github更新包,看看问题是否仍然存在。

代码语言:javascript
复制
remotes::install_github("imminfo/tcr")

或者,您可以切换到“后继包”immunarch,它在CRAN上并仍在维护。有关更多详细信息,请参阅imminfo/tcr/README.md

怎么会出这事?

我在这里猜测,但将重新制定这一部分,一旦修复被确认。

基本上,dplyr最近的一些变化打破了tcR 2.2.4中的逻辑。tcR2.3中修复了此问题。您可能运行了update.packages(),它更新了dplyr,但没有更新tcR,因为tcR不再位于CRAN上。因此,这两个包版本不再兼容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68609775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档