maybe I can illustrate the problem by showing how a c programmer might think
about the problem and the kinds of mistakes 'we' ( I) make when trying to do
this in R

 cstruct<-function(int, bool){
+
+ myint<- int*2;
+
+ mybool<-!bool;
+ myvec<-rep(mybool,10)
+ mymat<-matrix(myint*10,nrow=3,ncol=3)
+ myframe<-data.frame(rep(myint,5),rep(bool,5))
+ returnlist<-list(myint,mybool,myvec,mymat,myframe)
+ return(returnlist)
+
+
+
+ }

# so I have a function that returns a list of hetergenous variables.
# an int, a bool, a vector of bools, a matrix of ints, a dataframe of ints
and bools

> test<-cstruct(3,T)


> test
[[1]]
[1] 6

[[2]]
[1] FALSE

[[3]]
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

[[4]]
     [,1] [,2] [,3]
[1,]   60   60   60
[2,]   60   60   60
[3,]   60   60   60

[[5]]
  rep.myint..5. rep.bool..5.
1             6         TRUE
2             6         TRUE
3             6         TRUE
4             6         TRUE
5             6         TRUE

# Now I want to access the first element of my list which is an  "an int"
# first mistake I always make is I just revert to thinking in the
# 'dot' structure of a c struct.

> test.myint
Error: object 'test.myint' not found

# Then I think its stored like a var in a dataframe, accessed by the $
> test$myint
NULL

# then I try to access the first element of the list
> test[1]
[[1]]
[1] 6

# That works.. but the [[1]] confuses me when I eval test[1] I want 6 back
# again thinking in C.
# so I try the third element

> test[3]
[[1]]
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

# ok I get my vect of bools back. Now I want the first element
# of that thing
# well test[3] is that thing.. and I want element 1 of test[3]

> test[3][1]
[[1]]
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

#hmm thats not what I expect. I wanted F back.
# frustrated I try this which i know is wrong

> test[3,1]
Error in test[3, 1] : incorrect number of dimensions

# crap.. maybe the $ is supposed to be used
> test$V3
NULL

# arrg.. how about 'dot"
> test.myvec
Error: object 'test.myvec' not found


Anyways, That's the kind of frustration. I have a list, third element is a
matrix
how do I referernce the 2 row 2 colum of the matrix in my list.. for
example.
and so forth..

On Sat, May 1, 2010 at 10:56 AM, Ted Harding
<ted.hard...@manchester.ac.uk>wrote:

> On 01-May-10 16:58:49, Giovanni Azua wrote:
> >
> > On May 1, 2010, at 6:48 PM, steven mosher wrote:
> >> I was talking with another guy on the list about this very topic.
> >>
> >> A simple example would help.
> >>
> >> first a sample C struct, and then how one would do the equivalent in
> >> R.
> >>
> >> In the end i suppose one want to do a an 'array' of these structs, or
> >> list
> >> of the structs.
> >
> > Or like in my use-case ... I needed a c-like struct to define the type
> > for aggregating the data to return from a function.
> >
> > Best regards,
> > Giovanni
>
> Assuming that I understand what you want, this is straightforward
> and can be found throughout the many functions available in R.
> The general form is:
>
>  myfunction <- function(...){
>    <code to compute objects A1, A2, ... , An>
>    list(valA1=A1, valA2=A2, ... , valAn=An)
>  }
>
> and then a call like
>
>  myresults <- myfunction(...)
>
> will create a list "myresults" with compnents "valA1", ... ,"valAn"
> which you can access as desired on the lines of
>
>  myresults$valA5
>
> As a simple example, the following is a function which explores
> by simulation the power of the Fisher Exact Test for comparing
> two proportions in a 2x2 table:
>
>  power.fisher.test <- function(p1,p2,n1,n2,alpha=0.05,nsim=100){
>    y1 <- rbinom(nsim,size=n1,prob=p1)
>    y2 <- rbinom(nsim,size=n2,prob=p2)
>    y <- cbind(y1,n1-y1,y2,n2-y2)
>    p.value <- rep(0,nsim)
>    for (i in 1:nsim)
>      p.value[i] <- fisher.test(matrix(y[i,],2,2))$p.value
>    list(Pwr=mean(p.value < alpha),SE.Pwr=sd(p.value < alpha)/sqrt(nsim))
>  }
>
> So, given two binomials B(n1,p1) and B(n2,p2), what would be the
> power of the Fisher test to detect that p1 was different from p2,
> at given significance level alpha? This is investigated by repeating,
> nsim times:
>  sample from Bin(n1,p1), sample from Bin(n2.p2)
>  do a Fisher test and get its P-value; store it
>    in a vector p.value of length nsim
> and then finally:
>  estimate the power as the proportion Pwr of the nsim cases
>    in which the P-value was less than alpha
>  get the SE of this estimate
>  return these two values as components Pwr and SE.Pwr of a list
>
> As it happens, here each component of the resulting list is of
> the same type (a single number); but in a different computation
> each component (and of course there could be more than two)
> could be anything -- even another list. So you can have lists
> of lists ... !
>
> Thus, instead of the simple returned list above:
>
>  list(Pwr=mean(p.value < alpha),
>       SE.Pwr=sd(p.value < alpha)/sqrt(nsim))
>
> you could have
>
>  list(Binoms=list(Bin1=list(size=n1,prob=p1),
>                   Bin2=list(size=n2,prob=p2))
>       Pwr=mean(p.value < alpha),
>       SE.Pwr=sd(p.value < alpha)/sqrt(nsim))
>
> thus also returning the details of the Binomials for which the
> simulation was carried out. You could access these all together as:
>
>  power.fisher.test(...)$Binoms
>
> or separately as
>
>  power.fisher.test(...)$Binoms$Bin1
> or
>  power.fisher.test(...)$Binoms$Bin2
>
> or even
>  power.fisher.test(...)$Binoms$Bin1$size
>  power.fisher.test(...)$Binoms$Bin1$prob
> etc.
>
> Ted.
>
> --------------------------------------------------------------------
> E-Mail: (Ted Harding) <ted.hard...@manchester.ac.uk>
> Fax-to-email: +44 (0)870 094 0861
> Date: 01-May-10                                       Time: 18:56:50
> ------------------------------ XFMail ------------------------------
>
> ______________________________________________
> 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.
>

        [[alternative HTML version deleted]]

______________________________________________
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.

Reply via email to