【问题标题】:Can an imported dataframe be converted to a function?可以将导入的数据框转换为函数吗?
【发布时间】:2016-11-30 14:26:28
【问题描述】:

我有一个简单的问题,但到目前为止我找不到通用的解决方案:
假设我有一个从 .csv 文件中获得的数据框 >df

    > df <- read.csv("foo.csv")    
    > df
      a b 
    1 1 D 
    2 2 E 
    3 3 F 

我想将此数据帧保存在 .R 文件中以便稍后再次获取它,但不读取 .csv 文件。它应该在源文件中,以便可以与其他用户共享该文件。
是否有可能将此数据帧转换为书面函数,例如
df&lt;-data.frame(a=c(1,2,3),b=c("D","E","F"))

【问题讨论】:

  • 您可以将环境中的对象用savesave.image保存为.RData,然后load
  • 如果df不太大,另一种方法是将dput(df)的输出复制并粘贴到源文件中。
  • 尝试dump("mtcars") 并检查生成的名为“dumpdata.R”的文件。这与dput 相同。

标签: r csv dataframe


【解决方案1】:

我们可以在会话结束时使用savesave.image 作为.RData

save.image("yourfile.RData")

然后在必要时加载它,以便加载之前创建的所有对象

load("yourfile.RData")

如果我们只需要save 单个对象,只需命名对象和文件

save(df, file = "yourfile.RData")
load("yourfile.RData")

【讨论】:

    【解决方案2】:

    您可以使用函数来执行此操作:

    mydf <- function(){
      data.frame(a=c(1,2,3),b=c("D","E","F"))
    }
    
    mydf()
    > mydf()
    a b
    1 1 D
    2 2 E
    3 3 F
    

    这就是你要找的吗?

    如 cmets 所述:

    • 使用更大的data.frames(如果不是所有data.frames,save+load 是更好、更方便的替代方案
    • dput(read.csv(...)) 的结果可以替换上例中的data.frame(a=c(1,2,3),b=c("D","E","F"))

    【讨论】:

    • 好的,我知道我应该提到我的数据框很大。所以我看到你的观点建立这样的功能。但我正在寻找的是一个导致像你这样的功能的功能。由于它很清楚数据框的外观,因此 R 应该可以反过来思考并构建导致相同输出的函数,而无需保存文件等。只是一个我可以放入的函数.R 源文件到将保存在那里的其他函数。但我想我会使用 .RData 方法。无论如何,谢谢。
    • 在开发包中有延迟加载数据集的选项;例如iris 不需要data(iris) 或任何其他函数调用(例如load 或自定义函数)。如果你碰巧在包外工作,也许这会很舒服,但在我看来,这不值得付出努力,我也会去 rdas。
    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 2015-06-20
    • 2017-08-07
    • 2020-07-15
    • 2014-02-21
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多