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