R conversão de tipo de expressão () function ()

Eu tenho tentado escrever um programa em R que implementa o método de Newton. Eu tenho tido mais sucesso, mas há dois pequenos obstáculos que me incomodam. Aqui está o meu código:

Newton<-function(f,f.,guess){
    #f <- readline(prompt="Function? ")
    #f. <- readline(prompt="Derivative? ")
    #guess <- as.numeric(readline(prompt="Guess? "))
    a <- rep(NA, length=1000)
    a[1] <- guess
    a[2] <- a[1] - f(a[1]) / f.(a[1])
    for(i in 2:length(a)){
        if(a[i] == a[i-1]){
           break
        } 
        else{
           a[i+1] <- a[i] - f(a[i]) / f.(a[i])
        }
    }   
    a <- a[complete.cases(a)]
    return(a)
}

Não consigo fazer com que R reconheça as funçõesf ef. se eu tentar usarreadline() para solicitar a entrada do usuário. Eu recebo o erro "Erro em Newton (): não foi possível encontrar a função" f. "" No entanto, se eu comentar as linhas de leitura (como acima), definaf ef. antes, então tudo funciona be

Eu tenho tentado fazer R calcular a derivada de uma função. O problema é que o objeto de classe com o qual R pode obter derivadas simbólicas éexpression(), mas quero tirar a derivada de umfunction() e me dê umfunction(). Em resumo, estou tendo problemas com a conversão de tipo entreexpression() efunction().

Tenho uma solução feia, mas eficaz, para passar defunction() paraexpression(). Dada uma função f,D(body(f)[[2]],"x") dará a derivada def. No entanto, essa saída é umexpression() e não consegui transformá-lo novamente em umfunction(). Preciso usareval() ou alguma coisa? Eu tentei fazer subconjuntos, mas sem sucesso. Por exemplo

g <- expression(sin(x))
g[[1]]
sin(x)
f <- function(x){g[[1]]}
f(0)
sin(x)

quando o que eu quero é f (0) = 0 desde que sin (0) = 0.

EDIT: Obrigado a todos! Aqui está o meu novo código:

Newton<-function(f,f.,guess){
    g<-readline(prompt="Function? ")
    g<-parse(text=g)
    g.<-D(g,"x")
    f<-function(x){eval(g[[1]])}
    f.<-function(x){eval(g.)}
    guess<-as.numeric(readline(prompt="Guess? "))
    a<-rep(NA, length=1000)
    a[1]<-guess
    a[2]<-a[1]-f(a[1])/f.(a[1])
    for(i in 2:length(a)){
        if(a[i]==a[i-1]){break
        }else{
        a[i+1]<-a[i]-f(a[i])/f.(a[i])
        }
    }   
a<-a[complete.cases(a)]
#a<-a[1:(length(a)-1)]
return(a)
}

questionAnswers(3)

yourAnswerToTheQuestion