模拟实验中经常遇到的问题和常用技巧
2023-12-17 10:42:20
简介
最近在进行新文章的数值模拟阶段。上一次已经跟读者们分享了模拟实验的大致流程,见:数值模拟流程记录和分享 。
本文是在前提下,汇总了小编在模拟实验中经常遇到的问题和常用技巧。
1. 隐藏输出结果
在拟合数据时,如果使用第三方包拟合,可能会出现以下情景:
如果想删除自动输出的内容,可以使用以下代码
sink("NUL")
fit <- fit(obj, data, stepsEM = 300, every = 100)
sink()
此时,将不会自动输出其他结果。该方法参考于stackoverflow,上面代码适用于 mac,windows 读者自测噢~
sink("NUL")
....
sink()
自动创建文件夹
有时候,读者需要保存实验结果并将其放到子文件夹中,可以通过以下代码,自动创建 result3
文件夹。然后再配合 write.xlsx()
,save.image()
来存储数据和工作空间 (见下一个知识点)。
folder_path <- paste("result3/",lambda,'-',m,sep='') #路径设置
if (!file.exists(folder_path)) { dir.create(folder_path,recursive = TRUE) } else { cat("Folder already exists:", folder_path, "\n")}
保存多个数据到 Excel 中
使用 openxlsx
包,将需要保存的变量 RB, RMSE, LEN, COV
存放到列表中。并通过 write.xlsx()
进行保存:
library(openxlsx)
sheets = list('RB'= RB, 'RMSE' = RMSE, 'LEN' = LEN, 'COV' = COV)
write.xlsx(sheets,paste(folder_path,"/n",n,".xlsx",sep=''),colNames = TRUE,rowNames = TRUE)
此时得到的结果:
技巧: 使用
paste()
函数,自动根据参数不同(n),改变路径和文件名称(文件夹要提前建立好,结合上一个知识点)。
运行完程序提醒
使用 beepr
包中的 beep()
,在代码末尾加入,即可在程序结束后发出声音从而提醒读者。详细小编以前写的推文:程序结束后记得提醒我。
beepr::beep(sound = "mario")
计算运行时间
有时候需要计算每次循环的运行时间,可以使用以下代码:
start_time <- Sys.time() # 记录初始时间
myfunction() # 运行你的代码
end_time <- Sys.time() # 记录终止时间
还有其他更高级的用法,详细见小编以前写的推文:计算代码运行时间的 5 种方法。
运行时进度条显示
为了展示循环次数和循环进度,可以在循环中添加 print(i)
:
for(i in 1:10){
print(i)
my_funtions #其他内容
}
当循环次数太多时,可以使用 if(i %% 10 == 0) print(i)
,此时得到:
另一种方式是,创建一个进度条:
# 创建一个进度条
pb <- txtProgressBar(min = 0, max = 100, style = 3) # 指定最小值、最大值和样式
# 模拟一个循环,更新进度条
for (i in 1:100) {
Sys.sleep(0.1) # 模拟耗时操作
setTxtProgressBar(pb, i) # 更新进度条
}
close(pb) # 关闭进度条
画图常用细节
包含数学符号
显示为中文问题
排序问题
主题设置问题
文章来源:https://blog.csdn.net/qq_37379316/article/details/135041518
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!