将所有变量值写入表中

时间:2015-04-10 11:03:23

标签: r

我是一个全新的R-newbie,我有一个简单的问题可能很有趣但是我找不到答案,即使我搜索了4个小时。我可能会错过这个概念。

我编写了一个Monte-Carlo脚本,其中包含许多存储在不同环境中的变量。在每次迭代结束时,我想将所有变量(在输入ls()时列出的变量)写入表中。

这将是我想要做的一个工作示例(没有我要求的项目)。 (感谢您的帮助,它帮助我建立了这个例子!)

#input data (data will be manipulated for mc later on)
ha<-5
w_eff<-1.9
v_T1<-8
n<-1000 #number of iterations

#function
T1_func <- function(ha_mc, w_eff_mc, v_T1_mc){
    T1_result <- ((ha*10)/(w_eff*v_T1));
    return(T1_result)
    }

for(i in 1:n){ #number of iterations

#MC maipulation (illustrative)
ha_mc<-rnorm(1, ha, sd=1)
w_eff_mc<-rnorm(1, w_eff, sd=1)
v_T1_mc<-rnorm(1, v_T1, sd=1)


#calculation
T1_mc<-T1_func(ha_mc, w_eff_mc, v_T1_mc)

#now I want to write all variables to a table
df<-data.frame(ha, w_eff, v_T1, ha_mc, w_eff_mc, v_T1_mc, T1_mc)
write.table(df, file = "result.txt", append = TRUE, quote = TRUE, sep = " ",
        eol = "\n", na = "NA", dec = ".", row.names = FALSE,
        col.names = !file.exists("result.txt"), qmethod = c("escape", "double"))
}

我的问题是:我该怎么做:

df<-data.frame(ha, w_eff, v_T1, ha_mc, w_eff_mc, v_T1_mc, T1_mc)

没有写下所有变量(ha,w_eff,v_T1,ha_mc,w_eff_mc,v_T1_mc,T1_mc),而是使用&#34; ls()&#34;。我如何在不同的环境中获得变量,以便我有一个名为&#34; my.env $ w_eff&#34;的列。

非常感谢!

2 个答案:

答案 0 :(得分:1)

我建议不要使用ls()而是使用包含您要存储的变量的data.frame。在这里,我首先使用正确的列标题创建文件"results.txt"(我存储abc的值)然后在每次迭代中我将相应的值附加到文件中。希望这会有所帮助:

n <- 10L
write.table(data.frame("a", "b", "c"), file = "result.txt", 
        col.names = FALSE, row.names = FALSE)
for (i in seq_len(n)) {
    #do MC

    a <- rnorm(1L)
    b <- exp(a)
    c <- a + b

    write.table(data.frame(a, b, c), file = "result.txt", 
            append = TRUE, row.names = i, col.names = FALSE)
}

答案 1 :(得分:0)

这是我在你的帮助下找到的解决方案,thx!

write_table_func <- function(env_name, file_part_name, dir_name){
#write input to table
df_input<-data.frame(as.list(get(env_name), all.names=TRUE))
sort.df_input <- df_input[,order(names(df_input))]

  filename<-(paste(sep="", dir_name, "/", "tabl_", process_n, "_", process_step_n, file_part_name, ".txt"));
  suppressWarnings(write.table(sort.df_input, file = paste(filename), append = TRUE, quote = TRUE, sep = " ",
              eol = "\n", na = "NA", dec = ".", row.names = FALSE,
              col.names = !file.exists(paste(filename)), qmethod = c("escape", "double")));
  rm(df_input);
  rm(sort.df_input);
}