在计算比例(0 < x < 1)时,我希望将结果x转换为最接近的1 / r形式,例如
x = 0.30 转换为 1/3
x = 0.29 转换为 1/4
我一直尝试使用MASS中的round()和fractions()来实现,但很少成功。
你认为在R中解决这个问题的最简单的方法是什么?
findR <- function(x){
possibles <- 1/seq(1:100)
diffs <- abs(x - possibles)
1/possibles[which.min(diffs)]}
df <- data.frame(x = seq(.1, .3, .01))
df$r <- sapply(df$x, findR)
x r
1 0.10 10
2 0.11 9
3 0.12 8
4 0.13 8
5 0.14 7
6 0.15 7
7 0.16 6
8 0.17 6
9 0.18 6
10 0.19 5
11 0.20 5
12 0.21 5
13 0.22 5
14 0.23 4
15 0.24 4
16 0.25 4
17 0.26 4
18 0.27 4
19 0.28 4
20 0.29 4
21 0.30 3
f <- function(x) ifelse(abs(1/floor(1/x) - x) < abs(1/ceiling(1/x) - x),floor(1/x),ceiling(1/x))
round(1/x)
或者ceiling(1/x)
呢?如果您能展示您的尝试并解释它为什么不起作用,那将会很有帮助。 - John Coleman