> -----Original Message----- > From: r-help-boun...@r-project.org > [mailto:r-help-boun...@r-project.org] On Behalf Of Peng Yu > Sent: Friday, December 11, 2009 9:18 AM > To: r-h...@stat.math.ethz.ch > Subject: Re: [R] Why a list of NULL's are reduced to NULL? > > On Fri, Dec 11, 2009 at 11:01 AM, William Dunlap > <wdun...@tibco.com> wrote: > >> -----Original Message----- > >> From: r-help-boun...@r-project.org > >> [mailto:r-help-boun...@r-project.org] On Behalf Of Peng Yu > >> Sent: Friday, December 11, 2009 8:44 AM > >> To: r-h...@stat.math.ethz.ch > >> Subject: [R] Why a list of NULL's are reduced to NULL? > >> > >> The following examples are confusing to me. It is OK, to > assigned NULL > >> to one element in a list. The result is still a list. > However, a list > >> of NULL's are reduced to NULL. I don't understand how this > conversion > >> occurs. Could somebody let me know what is going on? > > > > The "simplification" algorithm for reformatting > > the output of apply and sapply is handy in the > > common case when you know that FUN will return > > the same sort of thing each time it it called. > > The algorithm is not very useful when FUN may return > > objects of various classes or lengths. sapply has > > a simplify=FALSE argument to avoid the simplification > > (so it acts like lapply) but apply doesn't. > > > > I suggest you either change your function to always > > return one class and length of object or use lapply() > > or sapply(simplify=FALSE,...) when you must use a function > > with variable output type. E.g., instead of > > apply(X, 1, function(row){f(row)}) > > use > > lapply(seq_len(nrow(X)), function(rowIndex){f(X[rowIndex,])}) > > or > > lapply(split(X, row(X)), function(row){f(row)}) > > Change my function to always returning one class may not always be > possible as I may call a third party R package that is not made by me > and does this kind of wired things of trying to 'simplify'. And I may > not know all the cases where the third party R package 'simplify' the > results, which does not always return the same type. In this case, I > can not be sure the return type is always the same. How do you deal > with this problem?
I don't understant your constraints. You say you cannot control what FUN returns and you cannot control whether apply or lapply is called. A reproducible set of examples would help. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > > >> > X=matrix(1:8, nr=4) > >> > apply(X,1, function(x) {if(x[[1]]==3){NULL}else{x[[1]]}}) > >> [[1]] > >> [1] 1 > >> > >> [[2]] > >> [1] 2 > >> > >> [[3]] > >> NULL > >> > >> [[4]] > >> [1] 4 > >> > >> > apply(X,1, function(x) {NULL}) > >> NULL > >> > >> ______________________________________________ > >> 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.