使用函数参数作为 R 中新数据框的名称

问题描述 投票:0回答:3

这个很简单,但是我搜索了也没找到这个小问题的解决方案。

我想使用函数的参数作为新数据框的名称,例如:

assign.dataset<-function(dataname){
    x<-c(1,2,3)
    y<-c(3,4,5)
    dataname<<-rbind(x,y)
}

然后

assign.dataset(new.dataframe.name)

只需创建一个名为 dataname 的新数据集。

我尝试使用 pasteassign 功能,但没有成功。

非常感谢

r dataframe assign function-parameter
3个回答
5
投票

你可以这样做...

assign.dataset<-function(dataname){
  x<-c(1,2,3)
  y<-c(3,4,5)
  assign(deparse(substitute(dataname)), rbind(x,y), envir=.GlobalEnv)
}

assign.dataset(new.dataframe.name)

new.dataframe.name
  [,1] [,2] [,3]
x    1    2    3
y    3    4    5

3
投票

这是相当于@Andrew 答案的

rlang

library(rlang)

assign.dataset<-function(dataname){
  x<-c(1,2,3)
  y<-c(3,4,5)
  assign(quo_name(enquo(dataname)), rbind(x,y), envir=.GlobalEnv)
}

assign.dataset(test_df)

enquo
捕获用户提供的参数,并将其与调用该函数的环境捆绑到
quosure
中。
quo_name
然后将
quosure
转换为字符。

但是,我建议反对这样做,而不是将函数的输出分配给对象。以下是我的做法:

assign.dataset<-function(){
  x<-c(1,2,3)
  y<-c(3,4,5)
  rbind(x,y)
}

test_df = assign.dataset()

结果:

  [,1] [,2] [,3]
x    1    2    3
y    3    4    5

0
投票

上述回复仍然需要您手动给data.frame命名,只需使用函数来分配它即可。这没什么意义......

就我而言,我有一堆 csv 文件要加载到以文件名命名的 data.frames 中。为此,我在循环中使用了简单的

assign
files
向量保存不带扩展名的 csv 文件的名称,
path
是文件夹):

for (i in files) {
  assign(i, read.csv(paste(path, "/", i, ".csv", sep="")), envir=.GlobalEnv)
}
© www.soinside.com 2019 - 2024. All rights reserved.