R tipo conversión expresión () función ()

He estado tratando de escribir un programa en R que implemente el método de Newton. He tenido mucho éxito, pero hay dos pequeños inconvenientes que me han estado molestando. Aquí está mi 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)
}

No consigo que R reconozca las funcionesf yf. si intento usarreadline() para solicitar la entrada del usuario. Me sale el error "Error en Newton (): no se pudo encontrar la función" f "." Sin embargo, si comento las líneas de lectura (como arriba), definaf yf. de antemano, entonces todo funciona bien.

He estado tratando de hacer que R calcule la derivada de una función. El problema es que el objeto de clase con el que R puede tomar derivados simbólicos esexpression(), pero quiero tomar la derivada de unafunction() y que me dé unfunction(). En resumen, tengo problemas con la conversión de tipos entreexpression() yfunction().

Tengo una solución fea pero efectiva para pasar defunction() aexpression(). Dada una función f,D(body(f)[[2]],"x") dará la derivada def. Sin embargo, esta salida es unaexpression(), y no he podido volver a convertirlo enfunction(). ¿Necesito usareval() ¿o algo? He intentado subconjunto, pero fue en vano. Por ejemplo

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

cuando lo que quiero es f (0) = 0 ya que sin (0) = 0.

EDIT: ¡Gracias a todos! Aquí está mi nuevo 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)
}

Respuestas a la pregunta(6)

Su respuesta a la pregunta