【问题标题】:Error with select function from dplyr来自 dplyr 的选择功能出错
【发布时间】:2018-03-01 16:44:07
【问题描述】:

当我使用 dplyr 中的 select 函数时,它不起作用并给我一个错误,指出我要选择的列名是未使用的参数。但是,如果我在 s: "dplyr::select" 之类的函数调用之前指定 dplyr,那么它可以正常工作:

这是一个示例 df:

 sampledf <- structure(list(CRN = c(5497L, 6515L, 7248L, 36956L, 37021L), 
        varA = structure(c(2L, 2L, 2L, 2L, 2L), .Label = c("A", 
        "B"), class = "factor"), varB = c(NA_integer_, NA_integer_, 
        NA_integer_, NA_integer_, NA_integer_), VarC = c(NA, NA, 
        NA, NA, 2L), varD = c(NA_integer_, NA_integer_, 
        NA_integer_, NA_integer_, NA_integer_), varE = c(1L, 1L, 4L, NA, NA)), .Names = c("CRN", 
        "varA", "varB", "varC", "varD", "varE"), row.names = c(NA, 5L), class = "data.frame")

这会产生错误:

 sample_error <- select(sampledf, varA)

选择错误(sampledf, varA):未使用的参数 (varA)

这很有效:

 sample_working <- dplyr::select(sampledf, varA)

 version

版本 _
平台 x86_64-w64-mingw32
拱 x86_64
操作系统 mingw32
系统 x86_64、mingw32
状态
专业 3
次要 4.0
2017 年
04月
第 21 天
svn 版本 72570
语言 R
version.string R 版本 3.4.0 (2017-04-21) 昵称 你 愚蠢的 黑暗

这里是会话信息:

sessionInfo()

R 版本 3.4.0 (2017-04-21) 平台:x86_64-w64-mingw32/x64(64位) 运行条件:Windows >= 8 x64(内部版本 9200)

矩阵产品:默认

语言环境: [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C LC_TIME=English_United States.1252

附加的基础包: [1] stats graphics grDevices utils datasets methods base

其他附加包: [1] readxl_1.0.0 bindrcpp_0.2 doBy_4.5-15 reshape2_1.4.2 ltm_1.0-0 > polycor_0.7-9 msm_1.6.4
[8] MASS_7.3-47 glmnet_2.0-10 foreach_1.4.3 Matrix_1.2-9 caret_6.0-76 lattice_0.20-35 dplyr_0.7.2
[15] purrr_0.2.3 readr_1.1.1 tidyr_0.6.3 tibble_1.3.3 > > > > > > ggplot2_2.2.1 tidyverse_1.1.1 openxlsx_4.0.17

通过命名空间加载(未附加): [1] Rcpp_0.12.11 lubridate_1.6.0 mvtnorm_1.0-6 assertthat_0.2.0 > psych_1.7.5 R6_2.2.2
[7] cellranger_1.1.0 plyr_1.8.4 MatrixModels_0.4-1 stats4_3.4.0 > httr_1.3.1 rlang_0.1.1
[13]lazyeval_0.2.0 minqa_1.2.4 SparseM_1.77 car_2.1-4 > nloptr_1.0.4 labeling_0.3
[19] splines_3.4.0 lme4_1.1-13 stringr_1.2.0 foreign_0.8-67 munsell_0.4.3 broom_0.4.2
[25] compiler_3.4.0 modelr_0.1.1 pkgconfig_2.0.1 mnormt_1.5-5 mgcv_1.8-17 nnet_7.3-12
[31] expm_0.999-2 codetools_0.2-15 ModelMetrics_1.1.0 grid_3.4.0 nlme_3.1-131 jsonlite_1.5
[37] gtable_0.2.0 magrittr_1.5 scales_0.4.1 stringi_1.1.5 xml2_1.1.1 iterators_1.0.8
[43] 工具_3.4.0 forcats_0.2.0 胶水_1.1.0 hms_0.3 生存_2.41-3 并行_3.4.0
[49] pbkrtest_0.4-7 colorspace_1.3-2 rvest_0.3.2 bindr_0.1 Have_1.1.0 quantreg_5.33

【问题讨论】:

  • 我无法重现此内容。要么用你自己的函数覆盖 dplyr select() 函数,要么在 dplyr 之后加载一个包,它有自己的 select() 函数优先。运行conflicts(detail=TRUE) 以查看函数在何处被双重定义。也许显示sessionInfo()我们可以看到你已经加载了哪些其他包。
  • 听起来像是与MASS::select 的名称冲突。在 MASS 之后加载 dplyr 会修复它。
  • sessionInfo() 按要求包含
  • MASS 包确实具有建议的select 函数。但是,我实际上并没有明确安装它。我需要它吗?
  • @stevezissou 安装不是问题。正在加载。如果您没有手动加载它,‹ltm›包似乎正在执行此操作。 Complain to its maintainer,或者不要使用它(ltm 包还附加了另外两个包;呃)。

标签: r dplyr tidyverse


【解决方案1】:

这已经很老了,但只是为了将来自 cmets 的信息填充到实际答案中:

这确实是由与另一个包的名称冲突引起的; 99(.9?)% 的时间特定包“故障”将是 MASS 包,它有一个(记录不充分)select() 函数(用于提取岭回归的最佳惩罚参数)。

一般来说,为了诊断这个问题,find("select") 会在搜索路径上首先找到select 函数的实际位置。

可能的解决方案:

  • 避免在dplyr(或tidyverse)包之​​后加载MASS
  • 如@EJAg 的回答,在调用函数时指定dplyr::select()
  • 在您的全局工作区中分配:select &lt;- dplyr::select(另请参见 conflicted 包)。

【讨论】:

    【解决方案2】:

    我有同样的问题,它是由与另一个包的名称冲突引起的。使用:dplyr::select 指定包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 2021-10-22
      相关资源
      最近更新 更多