2016-10-26 1 views
0

Mes données ressemble à ceci:variable d'entrée Modifier fonction pour obtenir une sortie de x.99

library(tidyverse) 
df <- tibble(
    x_val = c(10.3, 14.3, 18.7) 
) 

Après avoir passé chaque x_val-my_fun ...

my_fun <- function(x) { 
    x * pi 
} 

df %>% rowwise() %>% mutate(y_val = my_fun(x_val)) 

... Je reçois le texte suivant :

# A tibble: 3 × 2 
x_val y_val 
<dbl> <dbl> 
1 10.3 32.35840 
2 14.3 44.92477 
3 18.7 58.74778 

Comment puis-je inverser la fonction (sans diviser par pi! Parce que ma fonction réelle i sa beaucoup plus complexe) pour trouver la valeur appropriée de x_val pour obtenir y_val qui est le plus proche integer - 0.01 .. pour atteindre x.99:

32.99 
44.99 
58.99 
+1

Essayez 'df%>% muter (y_val = trunc (my_fun (x_val)) + 0,99) ' – akrun

+1

Vous pouvez également ajouter' ceiling (x) - .01' à votre fonction. – Zach

+0

Désolé, j'aurais dû être plus clair ... J'ai besoin de connaître la valeur correcte de 'x_val' pour obtenir 32.99 .... (10.501) .... sans simplement diviser par pi (parce que ma fonction réelle est beaucoup plus complexe – emehex

Répondre

1

D'après ce que je comprends, vous avez une fonction f (x_val) qui est complexe et vous veulent la fonction inverse de f. Vous voulez trouver x_val en connaissant le y_val. En cochant Solving for the inverse of a function in R, vous pouvez essayer (ajuster les parties inférieure et supérieure, je ne connais pas les limites de votre fonction):

inverse = function (f, lower = -100, upper = 100) { 
    function (y) uniroot((function (x) f(x) - y), lower = lower, upper = upper)[1] 
} 

yourfunction_inverse = inverse(my_fun, 0.1, 100) 

Et les résultats seront

results <- sapply(c(32.99, 44.99, 58.99), yourfunction_inverse)