我想在一个循环中移动,并在特定的时间间隔保存一个值。我想用这种形式:
t <- 0
t_end <- 10
time_step <- 0.01
record_interval <- 1
while (t <= t_end){
if (t %% record_interval == 0) print(t)
t <- t + time_step
}
字符串
但当然,这样做是失败的,由于机器精度的问题。
我能做的:
if (isTRUE(all.equal(t %% record_interval,0, tolerance = time_step*0.1))) { ...
型
但即使这样也失败了,因为有时它给出的模是record_interval而不是0。
所以,我可以用一个or语句运行我的代码,使用上面的语句,并检查模是否等于record_interval,但这是令人难以置信的丑陋。我相信有一个明显的,简单的方法来解决这个问题,但我不知所措。我不想引入不必要的整数计数器(all.equal部分可以工作,只是不太好看,所以看起来不那么糟糕),我希望能够根据需要更改time_step和record_interval。
2条答案
按热度按时间1szpjjfi1#
一个选项是使用
tidyverse
创建一个名为您的百分之一值的新列,将数据过滤到您想要的间隔,然后删除新列。字符串
创建于2023-12-01使用reprex v2.0.2
5uzkadbs2#
您可以通过添加一个滚动变量并在达到保存值的点时重置它来解决精度问题:
字符串
感谢您的帮助的答复!