R - 我希望数据框名称由命令行参数确定

时间:2012-03-09 00:39:47

标签: r save command-line-arguments dataframe

我希望数据框名称由命令行参数确定。以下内容应该清楚我要做的事情......我希望!

执行使用:

rterm --vanilla < c:/temp/myprog.txt --args XYZ

c:/temp/myprog.txt的内容:

# I am using command line arguments
Args <- commandArgs(TRUE);

# Args[1] is the desired dataframe name
print(Args[1]);

# Create a simple dataframe
df <- c(c(1,2),c(3,4));
print(df);

# Save it
path <- 'c:/temp/mydata.rdata'
save(df, file=path);

# Clear the dataframe from memory
rm(df);

# Is it really gone?
print(df);

# Load the dataframe from disk
load(path);

# Did you get it?
print(df);

# --- This is where things start to go bad ---
# --- I know this is wrong, and I know why ---
# --- but it should make clear what it is  ---
# --- I am attempting to do.               ---

# Copy it to dataframe with name passed from command line
Args[1] <- df;

# Write it to disk with the new name
save(Args[1], file=path);

# Clear the dataframe from memory
rm(Args[1]);

# Is it really gone?
print(Args[1]);

# Load the dataframe from disk
load(path);

# Did you get it?
print(Args[1]);

# That's all

提前致谢。

* * 事后更新......这项工作......

C:\Program Files\R\R-2.14.2\bin\x64>rterm --vanilla < c:/temp/myprog.txt --args XYZ

> # I am using command line arguments
> Args <- commandArgs(TRUE);
>
> # Args[1] is the desired dataframe name
> print(Args[1]);
[1] "XYZ"
>
> # Create a simple dataframe
> df <- c(c(1,2),c(3,4));
> print(df);
[1] 1 2 3 4
>
> # Save it
> path <- 'c:/temp/mydata.rdata'
> save(df, file=path);
>
> # Clear dataframe so I can see if it
> # is really populated by the load
> rm(df);
>
> # Load the dataframe from disk
> load(path);
>
> # Did you get it?
> print(df);
[1] 1 2 3 4
>
> # --- This is where things start to go bad ---
> # --- I know this is wrong, and I know why ---
> # --- but it should make clear what it is  ---
> # --- I am attempting to do.               ---
>
> # Copy it to dataframe with name passed from command line
> assign(Args[1], df);
>
> # Write it to disk with the new name
> save(list=Args[1], file=path);
>
> # Clear memory so I can see if the dataframe
> # is really populated by the load
> rm(df);
> rm(XYZ);
>
> # Load the dataframe from disk
> load(path);
>
> # Did you get it?  Is its name as expected?
> # (In subsequent processing I will be able to
> # hard code the name as shown here.)
> print(XYZ);
[1] 1 2 3 4
>

3 个答案:

答案 0 :(得分:2)

尝试

assign(Args[1],df)

(见?assign)。

如果Args[1]包含字符串'XYZ',那么您将能够通过XYZ引用数据框。

e.g:

dfname <- 'XYZ' # your Args[1] I presume
df <- data.frame( a=runif(10) ) # random data frame

assign(dfname,df)

# now I can access df by typing XYZ:
XYZ
XYZ$a

# etc.

保存时,save(df,...)无法完成工作 - 它会使用变量名df保存df

相反,您使用list参数传递要保存的变量的名称以进行保存。

例如:

save(list='XYZ',file='tmp.rda')

当你然后load('tmp.rda')时,你将拥有变量XYZ,其中包含保存它时包含的内容。

所以,对你来说:

# to show it works:
path <- 'tmp.rda'
save(list=Args[1],file=path)

rm(list=ls())
load(path)
print(XYZ) # this will work.

答案 1 :(得分:0)

而不是

Args[1] <- df;

试试这个:

assign(Args[1],df)

答案 2 :(得分:0)

使用saveRDSreadRDS函数是否有效而不是试图将您的data.frame变为自定义名称?

像这样:

x <- data.frame(a=1:10, b=letters[1:10])
saveRDS('some.file.rds')
rm(x)

XYZ <- readRDS('some.file.rds')
## Carry on ...