如何在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

创建于2022-03-23由reprex包(v2.0.1(

一个潜在的有趣的替代方案是使用gdata包中可用的mv函数:

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:在R函数中传递参数似乎很困难

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

  • gdata中提供的mv使用了assign,类似于@Rui Barradas提供的有效答案,并为参数检查和可选的目标环境提供了一些其他小工具。依赖这个包来完成这个小任务是否有意义,主要取决于处理依赖关系的品味/方法。

最新更新