2016-08-11 6 views
0

RDAファイルをグローバル環境に読み込むと、結果のデータフレームが別の名前に変わるのはなぜですか? RDAが作成された関数の中で、どのように名前を変更できますか?環境内のRDAファイルが別の名前に変更される

私の関数はSaveRDAtoDisk(table)と呼ばれ、テーブル名を取ります。関数はSQLデータを読み込み、データフレームをRDAとして保存します。問題は、私が入力を取得するテーブル名はアンダースコアを持っていることを知っているので、私は変数に所望の出力テーブル名を割り当てる:

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

だから、これを出力すべき所望のデータフレーム名。私は、関数内に割り当て変数とする

機能SaveRDAtoDisk("big_table")が正しくRDAを出力はbig.table.dt.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をロードするときに、それはRDAが適切に命名されていても「name.of.table.dt」としませbig.table.dtと呼ばれるデータフレームをロードし、変数は関数内で割り当てられています。

答えて

2

save()変数の名前を必ず変更するのは嫌いです。 name.of.table.dtという変数を保存するように求めています。これを他の変数として保存する場合は、その名前の変数を作成する必要があります。ここには1つの方法があります。正しい名前のオブジェクトで一時環境を作成し、その環境で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 
+1

適切な拡張モジュールを読み込むことができていることがわかりますが.Rdataです。 OPの特有の問題はsaveRDSとreadRDSで解決するのが一番良いように思えます.1つのオブジェクトしか含まれていないため、読み込み時に別の名前を割り当てることができます。 – AlexR

関連する問題