如何在 R 中重命名数据框?

How to rename dataframe in R?

假设我有两个数据框,dmsuppdm

test <- function(inds) {
    a1 <- inds
    a2 <- paste("supp", a1, sep = '')
    
    print(class(a1))
    print(class(a2))
}

test(dm)

此时a1dm数据框,但是a2不是suppdm,只是字符。如何输入一个参数并使用两个数据框?这属于数据框的重命名吗?


PS:R函数传参好像比较难

您必须使用assign创建一个名称由字符串给定的对象,并使用get获取该字符串给定的对象。
请注意,前缀为 "supp" 的名称将仅存在于函数中,并在退出时被丢弃。

test <- function(inds){
  a1 <- deparse(substitute(inds))
  a2 <- paste0("supp", a1)
  assign(a2, inds)
  out_df <- get(a2)
  
  print(class(a1))
  print(class(a2))
  print(class(out_df))
  
  out_df
}

head(test(iris))
#> [1] "character"
#> [1] "character"
#> [1] "data.frame"
#>   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
#> 3          4.7         3.2          1.3         0.2  setosa
#> 4          4.6         3.1          1.5         0.2  setosa
#> 5          5.0         3.6          1.4         0.2  setosa
#> 6          5.4         3.9          1.7         0.4  setosa

reprex package (v2.0.1)

创建于 2022-03-23

一个可能有趣的替代方法是使用 mv function available within the gdata 包:

library("gdata")
dfA <- data.frame(colA = c(1,2), colB = c(3,4))
ls()
# [1] "dfA"
# to: argument takes any string so conveniently it can be used 
#     with usual string manipulation functions
mv(from = "dfA", to = paste0("df", "B"))
ls()
# "dfB"

备注

  • 关于您的观察:

    PS: it seems difficult to pass parameters in R function

    这取决于个人的观点,R 可能被认为更容易或更具挑战性,具体取决于开发人员的背景、经验水平等。我认为这是一个需要更长时间对话的主题。

  • mvgdata 中提供,利用 assign,类似于 contributed by @Rui Barradas,另外还提供了一些其他的参数检查工具和可选的目标环境。依赖这个包来完成这个小任务是否有意义主要是 taste/approach 处理依赖关系的问题。