2017-08-01 4 views
1

Dire que j'ai une liste de décimalesFonction en R pour convertir un nombre décimal en une fraction avec un dénominateur spécifié

x <- c(0.55, 0.246, 0.767) 

Je souhaite avoir ces convertis en fractions de 10 pour que je sois

6/10 2/10 8/10 

Je suis tombé sur ce qui fonctionne très bien. Cependant, je me demandais s'il y avait une fonction qui le ferait?

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" 

Ceci est différent à d'autres questions de débordement de pile que j'ai rencontré depuis que je suis intéressé par l'existence d'un dénominateur commun pour tous mes décimaux et intéressés à déterminer ce qui est le dénominateur.

Merci!

+2

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

+0

Copie possible de [Imprimer le nombre comme fraction réduite dans R] (https://stackoverflow.com/questions/5046026/print-number-as-reduced-fraction-in-r) –

+0

'MASS :: fractions' est très probablement ce dont vous avez besoin. Cependant, si à la place vous devez arrondir à un dénominateur * spécifique *, vous pouvez également essayer 'paste0 ((x% /% (1/den)) + (x %% (1/den)> (1/2/den)), "/", den) '. – nicola

Répondre

2

Juste au cas où vous avez besoin d'utiliser une version simplifiée de la fonction ci-dessus

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

C'est beaucoup plus idéal. Merci pour ça. – user7715029

+0

Assurez-vous que vous êtes satisfait des approximations si vous décidez d'utiliser quelque chose comme ça. Je veux dire que 0,55 n'est pas égal à 6/10. Plus le dénominateur est grand, plus la valeur réelle sera élevée. Comme 0,55 = 55/100. – AntoniosK

+0

Oui, je ne pense pas à cela. Il doit être utilisé pour enseigner où ces concepts de décimales et/100 sont plus difficiles à comprendre/visualiser. Je vous remercie. – user7715029