Hi guys! I have to compute something and i don't know what i'm doing wrong. my code is a bit complex, but imagine that is something like this: a = c(1,2,3,4) ia = length(a) x = seq(1,100,length=0.1) ib = length(x) int1 = numeric(ib) b = numeric(ib) for(j in 1:ia) { H = function(x) {sin(x + a[j])} for(i in 1:ib) { int = integrate(H, lower = 0, upper = x[i]) int1[i] = int[1] b[i] = 1 + a[i] } end int1 = unlist(int1) int2 = int1*b ss[j] = sum(int2) } end if i try this code without the for loop it's ok, but when i put the for on, i get all sort of errors... Thank you for your help :) -- View this message in context: http://r.789695.n4.nabble.com/loop-function-and-integrate-tp4651436.html Sent from the R help mailing list archive at Nabble.com.
Now i've managed to do this: funcs <- list() funcs[] # loop through to define functions for(i in 1:ib-1){ # Make function name funcName <- paste( 'func', i, sep = '' ) # make function func = paste('function(x){sin(x + a[', i,'])))}',sep = '') funcs[[funcName]] = eval(parse(text=func)) } end but still cant apply the integrate in a loop for all the different functions..... :/ help me out guys.... pretty please :) -- View this message in context: http://r.789695.n4.nabble.com/loop-function-and-integrate-tp4651436p4651455.html Sent from the R help mailing list archive at Nabble.com.
Hello, Your code doesn't run without initializing 'ss' to something. And I've made some changes, but I don't understand what you are trying to do. See comments inline. a = c(1,2,3,4) ia = length(a) x = seq(1, 100, by=0.1) # It was 'length = 0.1' (!) ib = length(x) ss <- numeric(ia) # New, 'ss' must exist. int1 = numeric(ib) b = numeric(ib) for(j in 1:ia) { H = function(x) {sin(x + a[j])} for(i in 1:ib) { int = integrate(H, lower = 0, upper = x[i]) int1[i] = int[1] b[i] = 1 + a[j] # It was 'a[i]', didn't make any sense. } int1 = unlist(int1) int2 = int1*b ss[j] = sum(int2) } ss And for loops (or any other type of loops) do _not_ end with 'end'. Hope this helps, Rui Barradas Em 30-11-2012 15:08, faeriewhisper escreveu:> Hi guys! > I have to compute something and i don't know what i'm doing wrong. my code > is a bit complex, but imagine that is something like this: > > a = c(1,2,3,4) > ia = length(a) > > x = seq(1,100,length=0.1) > ib = length(x) > > int1 = numeric(ib) > b = numeric(ib) > > for(j in 1:ia) { > H = function(x) {sin(x + a[j])} > for(i in 1:ib) { > int = integrate(H, lower = 0, upper = x[i]) > int1[i] = int[1] > b[i] = 1 + a[i] > } > end > int1 = unlist(int1) > int2 = int1*b > ss[j] = sum(int2) > } > end > > if i try this code without the for loop it's ok, but when i put the for on, > i get all sort of errors... > Thank you for your help :) > > > > -- > View this message in context: http://r.789695.n4.nabble.com/loop-function-and-integrate-tp4651436.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
On 30-11-2012, at 16:08, faeriewhisper wrote:> Hi guys! > I have to compute something and i don't know what i'm doing wrong. my code > is a bit complex, but imagine that is something like this: > > a = c(1,2,3,4) > ia = length(a) > > x = seq(1,100,length=0.1) > ib = length(x) > > int1 = numeric(ib) > b = numeric(ib) > > for(j in 1:ia) { > H = function(x) {sin(x + a[j])} > for(i in 1:ib) { > int = integrate(H, lower = 0, upper = x[i]) > int1[i] = int[1] > b[i] = 1 + a[i] > } > end > int1 = unlist(int1) > int2 = int1*b > ss[j] = sum(int2) > } > end >What are you doing? What's the "end" doing in your code in two places. end is a function to extract and encode the last observation of a time series object. See ?end It makes absolutely no sense to put them in your code. Remove them immediately. You haven't declared ss to be a vector. So before the start of the j loop insert ss <- numeric(ia) And simplify your code: ss <- numeric(ia) for(j in 1:ia) { H = function(x) {sin(x + a[j])} for(i in 1:ib) { int = integrate(H, lower = 0, upper = x[i]) int1[i] = int$value b[i] = 1 + a[i] } ss[j] = sum(int1*b) } ss And more simplification is possible by eliminating b, which I leave to you. Berend