用户定义函数将多个数据框导出到全局环境中

Posted

技术标签:

【中文标题】用户定义函数将多个数据框导出到全局环境中【英文标题】:User defined function export multiple data frames into global environment 【发布时间】:2016-03-29 14:56:10 【问题描述】:

我创建了一个函数,它计算各种患者数据的统计数据,并且除了输出图之外,它还生成包含每个患者的汇总统计数据的数据框。

如果我在 R 中复制并运行该函数,则输出可供我使用。但是,我现在从单独的 R 脚本调用该函数,并且数据框不再可用。

有什么办法可以改正吗?

例如,

test=function(a)
  A=a
  B=2*a
  C=3*a
  D=4*a
  DF=data.frame(A,B,C,D)


a=c(1,2,3,4)
test(a)

这不会返回DF,但如果我要输入:

  a=c(1,2,3,4)
  A=a
  B=2*a
  C=3*a
  D=4*a
  DF=data.frame(A,B,C,D)

然后很明显DF 被返回。有没有一种简单的方法来解决这个问题,以便 DF 可以从 test 函数中获得?

【问题讨论】:

如果test(a) 没有返回DF,也许你应该在函数内添加一行return(DF)。 (不确定是不是你的意思。) 这不是我的意思,但我可以看到它是如何出现的。我希望 DF 存储在全局环境中,而不是显示在控制台中。 如果你在函数内部添加return(DF),并像DF = test(a)一样使用函数,它应该会如你所愿。这是在 R 中做事的惯用方式,而不是让函数创建对象作为副作用。如果您真的想按照您的描述进行操作,那么 <<- 赋值运算符可能会起作用,但通常不鼓励这样做。相关:***.com/q/9726705/1191259 【参考方案1】:

试试:

test=function(a)
  A=a
  B=2*a
  C=3*a
  D=4*a
  DF=data.frame(A,B,C,D)


a=c(1,2,3,4)
df<-test(a)
print(df)

通过将函数的返回值分配给一个新变量,它现在可以在全局空间中访问。

【讨论】:

【参考方案2】:

如果您想将函数内的对象分配给全局环境以便于检索,那么您的运算符是“>”以了解更多信息,请参阅:

?assignOps()

test <- function(a)
       A=a
       B=2*a
       C=3*a
       D=4*a
       DF <<- data.frame(A,B,C,D)


# trial your dummy data
a=c(1,2,3,4)
test(a)
DF

嘿,presto ...它的工作原理!在函数中写入return(DF) 不会将您的数据框传递到全局环境。

【讨论】:

以上是关于用户定义函数将多个数据框导出到全局环境中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用降雪导出预定义函数?

通过用户定义的函数向数据框添加列

Dask数据框中的多个聚合用户定义函数

R用户定义函数对多个变量进行分组

如何在没有评估环境的情况下对函数进行集群导出

哪个命令是用来定义shell的全局变量