[R] list output

MacQueen, Don macqueen1 at llnl.gov
Thu Mar 26 20:21:48 CET 2015


I don't think you are correctly keeping track of the structure of your
objects.
(and my email software may mess up the indentation, but I can't prevent it)


I have not tested, but try replacing

   out[i]$phi_0 <- x$phi_0
   out[i]$maxlike <- x$maxlike
   out[i]$bigp <- x$bigp

with

   out[[i]] <- list(phi_0=x$phi_0,
                    maxlike=x$maxlike,
                    bigp=x$bigp
                   )

(double bracket, as Peter suggested)

Then also replace
  aic[i] <- -2*out[i]$maxlike + (2*(i+1))
with
 aic[i] <- -2*out[[i]]$maxlike + (2*(i+1))

To begin understanding this, see this little sequence:
> foo <- vector('list',3)
> foo[[2]] <- list(a=1, b=2)
> foo[2]$a
NULL
> foo[[2]]$a
[1] 1




Also, which() does not return a list object as you are using it, so there
is no reason to unlist() it. Might as well use
  which.min(minaic)
while you're at it.

So replace your last three lines with
  out[which.min(minaic)]
as the last line of your function, before the closing }

No need to use return()

-Don


-- 
Don MacQueen

Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062





On 3/26/15, 11:22 AM, "Erin Hodgess" <erinm.hodgess at gmail.com> wrote:

>Hello!
>
>I am having some trouble with some list output.
>
>Here is my code:
>geobunch <- function(y) {
>
>          out <- vector("list",3)
>          aic <- numeric(length=3)
>          print(str(out))
>          for(i in 1:3) {
>
>          x <- geomin(y,i)
>          print(i)
>          print(x)
>          print(str(x))
>          out[i]$phi_0 <- x$phi_0
>          out[i]$maxlike <- x$maxlike
>          out[i]$bigp <- x$bigp
>          aic[i] <- -2*out[i]$maxlike + (2*(i+1))
>}
>          minaic <- which(aic==min(aic))
>          minout <- out[unlist(minaic)]
>          return(minout)
>}
>
>And here is the output:
>> geobunch(ez2a)
>List of 3
> $ : NULL
> $ : NULL
> $ : NULL
>NULL
>[1] 1
>$phi_0
>[1] 2.856428
>
>$bigp
>[1] 0.1584016
>
>$maxlike
>[1] -473.0203
>
>List of 3
> $ phi_0  : num 2.86
> $ bigp   : num 0.158
> $ maxlike: num -473
>NULL
>Error in aic[i] <- -2 * out[i]$maxlike + (2 * (i + 1)) :
>  replacement has length zero
>In addition: Warning messages:
>1: In out[i]$phi_0 <- x$phi_0 :
>  number of items to replace is not a multiple of replacement length
>2: In out[i]$maxlike <- x$maxlike :
>  number of items to replace is not a multiple of replacement length
>3: In out[i]$bigp <- x$bigp :
>  number of items to replace is not a multiple of replacement length
>>
>
>I know that the problem is in how I am setting up the "out" variable, but
>I'm not sure how to correct it.  Also, the bigp variable can take on
>different lengths.
>
>This is on R version 3.1.3, on Ubuntu 14.04.
>
>Thank you so much for any help.
>
>Sincerely,
>Erin
>
>
>
>-- 
>Erin Hodgess
>Associate Professor
>Department of Mathematical and Statistics
>University of Houston - Downtown
>mailto: erinm.hodgess at gmail.com
>
>	[[alternative HTML version deleted]]
>
>______________________________________________
>R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>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.



More information about the R-help mailing list