Rui and the R-help team, In Rui's helpful answer below, the function returns a list as output. When we apply() the function to the data.frame, dataframe$newcolumn has 2 layers of list before we can access each vector elements. For instance, dataframe$newcolumn[[1]][[1]] is a vector whereas dataframe$newcolumn and dataframe$newcolumn[[1]] are lists. Is there a solution that involves less layers of lists? I am just trying to understand the R language better.
Thank you. On Sun, Jun 10, 2012 at 3:18 PM, Rui Barradas <ruipbarra...@sapo.pt> wrote: > Hello, > > What you need is to have your function return a list, not a vector. Like > this > > testfun <- function (x, y) list(seq(x, y, 1)) > > testframe<-data.frame(xvalues=c(2,3),yvalues=c(4,5)) > > testframe$newcolumn <- apply(testframe, 1, function(x) testfun(x[1], x[2])) > class(testframe$newcolumn) # [1] "list" > > Then you access lists and list elements. > > testframe$newcolumn[[1]] # a list with just one element > testframe$newcolumn[[1]][[1]] # that element, a vector > testframe$newcolumn[[1]][[1]][2] # the vector's 2nd element > > > Since you want the function to return vectors in order to do further > computations, you'll access those vectors by varying the list index, > > > testframe$newcolumn[[1]][[1]] # first list, it's only vector > testframe$newcolumn[[2]][[1]] # second list, it's only vector > > > Etc. > > Hope this helps, > > Rui Barradas > > Em 10-06-2012 12:29, Onur Uncu escreveu: >> >> Thank you Duncan. A follow-up question is, how can I achieve the >> desired result in the earlier email? (i.e. Add the resulting vectors >> as a new column to the existing data.frame?) I tried the following: >> >> testframe$newcolumn<-apply(testframe,1,function(x)testfun(x[1],x[2])) >> >> but I am getting the following error: >> >> Error in `$<-.data.frame`(`*tmp*`, "vecss", value = c(2, 3, 4, 3, 4, 5 >> : replacement has 3 rows, data has 2 >> >> Thanks for the help. >> >> >> On Sun, Jun 10, 2012 at 12:02 PM, Duncan Murdoch >> <murdoch.dun...@gmail.com> wrote: >>> >>> On 12-06-10 6:41 AM, Onur Uncu wrote: >>>> >>>> >>>> R-Help community, >>>> >>>> I understand that data.frames can hold elements of type double, string >>>> etc but NOT objects (such as a matrix etc). >>> >>> >>> >>> That is incorrect. Dataframes can hold list vectors. For example: >>> >>> A <- data.frame(x = 1:3) >>> A$y <- list(matrix(1, 2,2), matrix(2, 3,3), matrix(3,4,4)) >>> >>> A[1,2] will now extract the 2x2 matrix, A[2,2] will extract the 3x3, etc. >>> >>> Duncan Murdoch >>> >>> This is not convenient for >>>> >>>> >>>> me in the following situation. I have a function that takes 2 inputs >>>> and returns a vector: >>>> >>>> testfun<- function (x,y) seq(x,y,1) >>>> >>>> I have a data.frame defined as follows: >>>> >>>> testframe<-data.frame(xvalues=c(2,3),yvalues=c(4,5)) >>>> >>>> I would like to apply testfun to every row of testframe and then >>>> create a new column in the data.frame which holds the returned vectors >>>> as objects. Why do I want this? Because the returned vectors are an >>>> intermediate step towards further calculations. It would be great to >>>> keep adding new columns to the data.frame with the intermediate >>>> objects. But this is not possible since data.frames can not hold >>>> objects as elements. What do you suggest as an elegant solution in >>>> this scenario? Thank you for any help! >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> I would love to hear if forum >>>> >>>> ______________________________________________ >>>> R-help@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. >>> >>> >>> >> >> ______________________________________________ >> R-help@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. >> > ______________________________________________ R-help@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.