【问题标题】:Is it possible to put data tables created within user-defined function in the global environment?是否可以将在用户定义的函数中创建的数据表放在全局环境中?
【发布时间】:2016-03-25 01:18:11
【问题描述】:

我正在创建一个用户定义的函数,它可以帮助我创建 20 多个数据表。但是,与不使用用户定义函数时不同,这些数据表不会在全局环境中创建。请参阅下面的示例代码。

library(data.table)
samplefunction <- function(f) {
  df=as.data.table(list(V1=c('a','a','b','c'),V2=c(1,2,3,4)))
  df.a=df[V1==f]
  df.a
}
samplefunction('a')

我只知道如果 df.a 在控制台窗口中输出 data.table 行,该功能是否有效,因为 df 和 df.a 数据表不会在全局环境中创建。我将无法以这种方式查看我的数据表。是否可以在全局环境中创建表?

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    使用&lt;&lt;- 运算符而不是=df.a 分配为函数中的全局变量:

    samplefunction <- function(f) {
        df=as.data.table(list(V1=c('a','a','b','c'),V2=c(1,2,3,4)))
        df.a <<- df[V1==f]
    }
    
    samplefunction('a')
    df.a
    

    https://stat.ethz.ch/R-manual/R-devel/library/base/html/assignOps.html

    或者您可以让函数返回数据表列表并使用标准分配。

    【讨论】:

      【解决方案2】:

      我认为@Nat 的第二个答案是更好的选择:

      samplefunction <- function(f) {
        df=as.data.table(list(V1=c('a','a','b','c'),V2=c(1,2,3,4)))
        df.a=df[V1==f]
      
        return(list("df"=df, "df.a"=df.a)
      }
      

      全局赋值可以覆盖全局环境中的对象,这通常是不好的。在这里修改函数后,就可以如下使用了:

      myresults <- samplefunction(input)
      # show df
      myresults[["df"]]
      # show df.a
      myresults[["df.a"]]
      

      【讨论】:

        猜你喜欢
        • 2016-04-25
        • 2010-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-28
        相关资源
        最近更新 更多