是否可以将在用户定义的函数中创建的数据表放在全局环境中?

时间:2016-03-25 01:18:11

标签: r data.table

我正在创建一个用户定义的函数,它可以帮助我创建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数据表不会在全局环境中创建。我将无法以这种方式查看我的数据表。是否可以在全局环境中创建表?

2 个答案:

答案 0 :(得分:1)

使用<<-运算符代替=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

或者您可以让函数返回数据表的列表并使用标准赋值。

答案 1 :(得分:1)

我认为@ 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"]]