为啥切片函数在不明确使用 dplyr 的情况下不起作用
Posted
技术标签:
【中文标题】为啥切片函数在不明确使用 dplyr 的情况下不起作用【英文标题】:why slice function not working without explicit use of dplyr为什么切片函数在不明确使用 dplyr 的情况下不起作用 【发布时间】:2019-06-07 04:33:55 【问题描述】:我正在学习使用 dplyr 并遇到了函数 slice。我尝试使用和不使用显式 dplyr 来调用它。
它适用于显式调用,但在没有 dplyr 的情况下调用时会出错。谁能指导我错误的根源是什么?
据我所知,切片功能是 dplyr 独有的,还是属于其他包?
> library("tidyverse")
> sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS 10.14.1
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
attached base packages:
[1] stats4 parallel stats graphics grDevices utils datasets methods base
other attached packages:
[1] faraway_1.0.7 pd.hg.u95av2_3.12.0 DBI_1.0.0 oligo_1.46.0 oligoClasses_1.44.0
[6] RSQLite_2.1.1 Biostrings_2.50.2 XVector_0.22.0 IRanges_2.16.0 S4Vectors_0.20.1
[11] ArrayExpress_1.42.0 Biobase_2.42.0 BiocGenerics_0.28.0 bindrcpp_0.2.2 forcats_0.3.0
[16] stringr_1.3.1 dplyr_0.7.8 purrr_0.2.5 tidyr_0.8.2 tibble_2.0.0
[21] ggplot2_3.1.0 tidyverse_1.2.1 readr_1.3.1
loaded via a namespace (and not attached):
[1] nlme_3.1-137 bitops_1.0-6 matrixStats_0.54.0
[4] lubridate_1.7.4 bit64_0.9-7 httr_1.4.0
[7] GenomeInfoDb_1.18.1 tools_3.5.1 backports_1.1.3
[10] utf8_1.1.4 R6_2.3.0 affyio_1.52.0
[13] lazyeval_0.2.1 colorspace_1.3-2 withr_2.1.2
[16] tidyselect_0.2.5 bit_1.1-14 curl_3.3
[19] compiler_3.5.1 preprocessCore_1.44.0 cli_1.0.1
[22] rvest_0.3.2 xml2_1.2.0 DelayedArray_0.8.0
[25] labeling_0.3 scales_1.0.0 digest_0.6.18
[28] minqa_1.2.4 pkgconfig_2.0.2 lme4_1.1-19
[31] limma_3.38.3 rlang_0.3.1 readxl_1.2.0
[34] rstudioapi_0.9.0 bindr_0.1.1 generics_0.0.2
[37] jsonlite_1.6 BiocParallel_1.16.5 RCurl_1.95-4.11
[40] magrittr_1.5 GenomeInfoDbData_1.2.0 Matrix_1.2-15
[43] Rcpp_1.0.0 munsell_0.5.0 fansi_0.4.0
[46] stringi_1.2.4 yaml_2.2.0 MASS_7.3-51.1
[49] SummarizedExperiment_1.12.0 zlibbioc_1.28.0 plyr_1.8.4
[52] grid_3.5.1 affxparser_1.54.0 blob_1.1.1
[55] crayon_1.3.4 lattice_0.20-38 haven_2.0.0
[58] splines_3.5.1 hms_0.4.2 pillar_1.3.1
[61] GenomicRanges_1.34.0 codetools_0.2-16 XML_3.98-1.16
[64] glue_1.3.0 BiocManager_1.30.4 modelr_0.1.2
[67] nloptr_1.2.1 foreach_1.4.4 cellranger_1.1.0
[70] gtable_0.2.0 assertthat_0.2.0 broom_0.5.1
[73] ff_2.2-14 iterators_1.0.10 memoise_1.1.0
> worldcup %>% dplyr::slice(1:3)
Team Position Time Shots Passes Tackles Saves player_name
1 Algeria Midfielder 16 0 6 0 0 Abdoun
2 Japan Midfielder 351 0 101 14 0 Abe
3 France Defender 180 0 91 6 0 Abidal
> worldcup %>% slice(1:3)
Error in .Call2("Rle_constructor", values, lengths, PACKAGE = "S4Vectors") :
Rle of type 'list' is not supported
【问题讨论】:
如果我的回答对你有用,你能接受吗? 【参考方案1】:worldcup %>% slice(1:3)
从 S4Vectors
包而不是 dplyr 调用 slice
。
尝试做:
detach("package:S4Vectors")
然后运行:
worldcup %>% slice(1:3)
【讨论】:
非常感谢您的快速回复> detach("package:S4Vectors") 错误:'pd.hg.u95av2' 需要包'S4Vectors' 所以不会被分离,如你所见我可以不分离“包:S4Vectors”,因此似乎解决这个问题的唯一方法是使用 dplyr::slice() 是的,在你的情况下这似乎更方便,否则删除另一个包。 CuriusScientist,你从来没有打电话(在这段代码中明确地)library(S4Vectors)
甚至library(pd.hg.u95av2)
,他们在你的搜索路径中怎么样?包pd.hg.u95av2
可能需要安装S4Vectors
,但如果它制作正确,则不需要它位于搜索路径中。当你重新启动 R 时(sessionInfo()
附加包中没有列出任何内容),尝试不加载它们或最多加载后者,看看你是否仍然有问题。
我认为更安全的解决方案可能是使用dplyr::slice
,以防您最终需要S4Vectors
来做其他事情(也许另一个打包的依赖于它)。【参考方案2】:
我认为更安全的解决方案可能是使用dplyr::slice
,以防您最终需要 S4Vectors 来做其他事情。也许另一个包明确依赖S4Vectors
甚至S4Vectors::slice
。
【讨论】:
需要注意的是,也可以使用slice <- dplyr::slice
覆盖对S4Vectors切片函数的引用以上是关于为啥切片函数在不明确使用 dplyr 的情况下不起作用的主要内容,如果未能解决你的问题,请参考以下文章