dplyr 0.3.0.2 rename()在加载reshape包时不正常

时间:2014-10-14 22:13:12

标签: r dplyr

sessionInfo()
# R version 3.1.1 (2014-07-10)
# Platform: x86_64-apple-darwin10.8.0 (64-bit)
# 
# attached base packages:
#   [1] stats     graphics  grDevices utils     datasets  methods   base     
# 
# other attached packages:
#   [1] dplyr_0.3.0.2
# 
# loaded via a namespace (and not attached):
#   [1] assertthat_0.1 DBI_0.3.1      lazyeval_0.1.9 magrittr_1.0.1 parallel_3.1.1 Rcpp_0.11.3   
# [7] tools_3.1.1  

当只加载dplyr 0.3.0.2时,默认的重命名习惯用法。

packageVersion("dplyr")
# [1] ‘0.3.0.2’
iris[1:10,] %>% rename(petal_length = Petal.Length)
#    Sepal.Length Sepal.Width petal_length Petal.Width Species
# 1           5.1         3.5          1.4         0.2  setosa
# 2           4.9         3.0          1.4         0.2  setosa

当加载库(重塑)时,这个成语似乎不起作用

# other attached packages:
#   [1] reshape_0.8.5 dplyr_0.3.0.2
# 
# loaded via a namespace (and not attached):
#   [1] assertthat_0.1   chron_2.3-45     data.table_1.9.5 DBI_0.3.1        lazyeval_0.1.9  
# [6] magrittr_1.0.1   parallel_3.1.1   plyr_1.8.1       Rcpp_0.11.3      reshape2_1.4    
# [11] stringr_0.6.2    tidyr_0.1        tools_3.1.1     

iris[1:10,] %>% rename(petal_length = Petal.Length)
# Error in rename(`iris[1:10, ]`, petal_length = Petal.Length) : 
#   unused argument (petal_length = Petal.Length)

并需要求助于以下代码

iris[1:10,] %>% rename(c("Petal.Length" = "petal_length"))
#    Sepal.Length Sepal.Width petal_length Petal.Width Species
# 1           5.1         3.5          1.4         0.2  setosa
# 2           4.9         3.0          1.4         0.2  setosa

这是一个错误吗?

2 个答案:

答案 0 :(得分:15)

如果加载了两个或多个包含同名函数的包,则需要使用双冒号运算符::从包中获取该函数的版本最后加载的包(希望这是有道理的)。

因此,就这两个软件包而言,这意味着dplyr::rename()使用dplyr版本,或reshape::rename()使用reshape版本,具体取决于搜索路径上的包。

由于您在加载reshape软件包后加载了dplyr软件包,因此您需要dplyr::rename()使用rename()软件包中的dplyr函数。 <{1}}在这种情况下单独发送rename()版本。

reshape

应该这样做。

答案 1 :(得分:1)

我推荐data.table::setnames功能。

iris %>% 
data.table::setnames(
    old = "Petal_length",
    new = "petal_length") %>% 
  head