我是一个全新的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;的列。
非常感谢!
答案 0 :(得分:1)
我建议不要使用ls()
而是使用包含您要存储的变量的data.frame
。在这里,我首先使用正确的列标题创建文件"results.txt"
(我存储a
,b
和c
的值)然后在每次迭代中我将相应的值附加到文件中。希望这会有所帮助:
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);
}