为啥切片函数在不明确使用 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 的情况下不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 require_once 在以下情况下不起作用?

为啥 selectAnnotation 在这种情况下不起作用?

为啥 DISTINCT 在这种情况下不起作用? (SQL)

为啥转换在我的情况下不起作用

为啥这个 if 语句在这种情况下不起作用? [关闭]

为啥我的 JRadioButton 在这种情况下不起作用?