【问题标题】:RDA file changes to different name in EnvironmentRDA 文件在环境中更改为不同的名称
【发布时间】:2016-12-18 18:25:54
【问题描述】:

当我将我的 RDA 文件加载到全局环境中时,为什么生成的数据框会更改为不同的名称?如何在创建 RDA 的函数中重命名它?

我的函数名为SaveRDAtoDisk(table) 并接受一个表名,该函数读取SQL 数据并将数据帧保存为RDA。问题是我知道获取输入的表名有下划线,所以我将所需的输出表名分配给一个变量:

name.of.table.dt <- paste0(gsub("_", ".", table), ".dt", sep = "")

所以这应该输出所需的数据框名称。

函数SaveRDAtoDisk("big_table") 正确输出了一个名为big.table.dt.rda 的RDA,但是当我加载RDA 时,它应该以名称big.table.dt 加载,但它被加载为name.of.table.dt,这是我分配给它的变量在函数中。这是怎么回事我如何重命名它?

# This function takes in a table name that contains underscores
# So I call SaveRDAtoDisk("log_hunter") and it loads a log.hunter.dt.rda into the current directory

# The problem is when I load the log.hunter.dt.rda file into the environment, the data frame is called name.of.table.dt (should be log.hunter.dt)

SaveRDAtoDisk <- function(table) {

  # This line changes "log_hunter" into "log.hunter.dt.rda"
  name.of.table.dt.rda <- paste0(gsub("_", ".", table), ".dt.rda", sep = "")

  # This line changes "log_hunter" into "log.hunter.dt"
  name.of.table.dt <- paste0(gsub("_", ".", table), ".dt", sep = "")

  # This is the select statement that saves the sql query into the RDA file
  name.of.table.dt.sql = paste0("select * from ", table, sep = "")

....
  # Executes select query above
  dt1 <- dbSendQuery(con, name.of.table.dt.sql)

  # Should be "log.hunter.dt" <- fetch(dt1, rows.testing)
  name.of.table.dt <- fetch(dt1, rows.testing)

  # This properly saves the file "log.hunter.dt.rda"
  save(name.of.table.dt, file = name.of.table.dt.rda)
  dbClearResult(dt1)
}

因此,当我将 RDA 加载到环境中时,它会加载一个名为“name.of.table.dt”的数据框,而不是 big.table.dt,即使 RDA 已正确命名并且变量已在函数中分配。

【问题讨论】:

    标签: r


    【解决方案1】:

    save() 不喜欢重命名变量。您要求它保存 name.of.table.dt 变量,这正是它正在做的事情。如果要将其保存为其他变量,则需要创建一个具有该名称的变量。这是一种方法。您可以使用具有正确名称的对象创建一个临时环境,然后在该环境中使用 save。

    table <- "hello"   #testing
    name.of.table.dt <- paste0(gsub("_", ".", table), ".dt", sep = "")
    name.of.table.dt.rda <- paste0(gsub("_", ".", table), ".dt.rda", sep = "")
    
    # store actual data in temp variable
    # xx <- fetch(dt1, rows.testing)
    xx <- 15    # testing
    
    save(list=name.of.table.dt, file=name.of.table.dt.rda, 
        envir=as.environment(setNames(list(xx), name.of.table.dt)))
    

    然后我们可以看到我们可以加载“hello.dt”

    exists("hello.dt")
    # [1] FALSE
    load(name.of.table.dt.rda)
    exists("hello.dt")
    # [1] TRUE
    

    【讨论】:

    • 正确的扩展名是 .Rdata。 OP 的特殊问题听起来最好用 saveRDS 和 readRDS 来解决,因为它们只包含一个对象,所以在读取时确实允许分配不同的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2020-06-13
    相关资源
    最近更新 更多