2017-08-01 32 views
1

说我有小数功能中的R为十进制转换成分数与指定的分母

x <- c(0.55, 0.246, 0.767) 

的名单,然后我希望有这些转化成分数出来的10,让我得到

6/10 2/10 8/10 

我遇到过这个很好用的工具。但是,我想知道是否有一个功能可以做到这一点?

frac.fun <- function(x, den){ 
    dec <- seq(0, den)/den 
    nams <- paste(seq(0, den), den, sep = "/") 
    sapply(x, function(y) nams[which.min(abs(y - dec))]) 
} 

frac.fun(x, 10) 
#[1] "6/10" "2/10" "8/10" 

这是其他堆栈溢出的问题,我已经遇到,因为我感兴趣的是有我的所有小数一个共同点,感兴趣的指定分母是什么不同。

谢谢!

+2

相关https://stackoverflow.com/questions/5046026/print-number-as-reduced-fraction-in- r – akrun

+0

[打印数字为R中缩减分数]的可能副本(https://stackoverflow.com/questions/5046026/print-number-as-reduced-fraction-in-r) –

+0

'MASS :: fractions'非常可能你需要什么。但是,如果您需要舍入一个特定分母,您还可以尝试'paste0((x%/%(1/den))+(x %%(1/den)>(1/2/den )), “/”,书房)'。 – nicola

回答

2

万一你需要使用上述功能的更简化的版本

f = function(x, den) {paste0(round(x * den), "/", den)} 
x <- c(0.55, 0.246, 0.767) 
f(x, 10) 

[1] "6/10" "2/10" "8/10" 
+0

这是更理想的。这次真是万分感谢。 – user7715029

+0

如果您决定使用类似的东西,请确保您对近似值感到满意。我的意思是0.55不等于6/10。分母越大,越接近实际值。由于0.55 = 55/100。 – AntoniosK

+0

是的,我在考虑这一点。它被用于教学,这些小数位和/ 100的概念更难以理解/可视化。谢谢。 – user7715029