【问题标题】:Use function argument as name for new data frame in R使用函数参数作为 R 中新数据框的名称
【发布时间】:2018-05-11 01:03:38
【问题描述】:

这个很简单,但是我已经搜索过,没有找到解决这个小问题的方法。

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

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 中做事的好方法。虽然在技术上可行,但函数不应在其自身范围之外创建变量。考虑更像dataname &lt;- create_dataset(),其中create_dataset() 只返回rbind(x,y)

标签: r dataframe assign function-parameter


【解决方案1】:

你可以这样做......

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

【讨论】:

    【解决方案2】:

    这是rlang 相当于@Andrew 的答案:

    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
    

    【讨论】: