Hello,(adsbygoogle = window.adsbygoogle || []).push({});

I've been trying to write a program in R that implements Newton's method. I've been mostly successful, but there are two little snags that have been bothering me. Here's my code:

1) I can't get R to recognize the functions f and f. if I try using readline() to prompt for user input. I get the error "Error in Newton() : could not find function "f."" However, if I comment out the readlines (as above), define f and f. beforehand, and then everything works fine.Code (Text):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)

}

2) I've been trying to make R calculate the derivative of a function. The problem is that the class object with which R can take symbolic derivatives is expression(), but I want to take the derivative of a function() and have it give me a function(). In short, I'm having trouble with type conversion between expression() and function(). I have an ugly but effective solution for going from function() to expression(). Given a function f, D(body(f)[[2]],"x") will give the derivative of f. However, this output is an expression(), and I haven't been able to turn it back into a function(). Do I need to use eval() or something? I've tried subsetting, but to no avail. For instance:

when what I want is f(0) = 0 since sin(0) = 0.Code (Text):> g<-expression(sin(x))

> g[[1]]

sin(x)

> f<-function(x){g[[1]]}

> f(0)

sin(x)

**Physics Forums | Science Articles, Homework Help, Discussion**

The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

# R Type Conversion

**Physics Forums | Science Articles, Homework Help, Discussion**