当我将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加载到环境中时,它会加载一个名为&#34; name.of.table.dt&#34;的数据框。即使RDA被正确命名并且在函数中分配了变量,也不是big.table.dt
。
答案 0 :(得分:2)
name.of.table.dt
不一定要重命名变量。您要求它保存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)))
变量,以便它正是它正在做的事情。如果要将其另存为其他变量,则需要使用该名称创建变量。这是一种方式。您可以使用具有正确名称的对象创建临时环境,然后在该环境中使用save。
exists("hello.dt")
# [1] FALSE
load(name.of.table.dt.rda)
exists("hello.dt")
# [1] TRUE
然后我们可以看到我们可以加载&#34; hello.dt&#34;
def static_vars(**kwargs):
def decorate(func):
for k in kwargs:
setattr(func, k, kwargs[k])
return func
return decorate
@static_vars(counter=0)
def TransferStats(transferedBytes, totalBytes):
if (transferedBytes / totalBytes) >= TransferStats.counter:
log.info('Transferred: {}% [{}/{}]'.format(round((transferedBytes/totalBytes)*100,2), transferedBytes, totalBytes))
TransferStats.counter += 0.025