假设我有两个数据帧,dm
和suppdm
test <- function(inds) {
a1 <- inds
a2 <- paste("supp", a1, sep = '')
print(class(a1))
print(class(a2))
}
test(dm)
此时,a1
是dm
数据帧,但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提供的有效答案,并为参数检查和可选的目标环境提供了一些其他小工具。依赖这个包来完成这个小任务是否有意义,主要取决于处理依赖关系的品味/方法。