Quantcast

Help with lapply and tapply

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Help with lapply and tapply

Fadhah
Dear all,

Thank you in advance for your time and help. I quite new to R and face a problem with lapply and tapply functions.
I simulated data and run the simulation 10 times to get 10 different simulated data. I have also built up my function and would like to apply this function to these 10 different data without repeating the code for 10 times. I now that we can use a loop family functions in R such as lapply or tapply functions. I tried both of them but both of them did not work. My data was stored as vector mode list.

Here is my data:

library(VineCopula)
library(copula)
Runs= 10 Saveas = vector(mode = "list", length = Runs)
 pb <- txtProgressBar(min = 0, max = Runs, style = 3)
for(j in 1:Runs){
 setTxtProgressBar(pb, j)
N=2000
 dim=dim
 U=runif(N, min=0,max=1)
 X = matrix(NA, nrow=N, ncol=2)
inds <- U < 0.7
 X[inds, ] <- rCopula(sum(inds), claytonCopula(1, dim=2))
 X[!inds, ] <- rCopula(N - sum(inds), frankCopula(4, dim=2))
Saveas[[j]] = X }
Then I built my function. I would like to apply this function to the 10 simulation run. That is I have 10 simulated data and would like to run my function to these data. I tried lapply and tapply function but I got  errors.
This is my function:

FUN1 <- EM_mixture_copula(data = Saveas[[j]],pi_1=pi_1,pi_2=pi_2,theta = theta,                Theta=Theta, tol = .00001, maxit = 1000)
Here is my tries with the errors that I got:

> result <- tapply(X,FUN1,simplify = T)
Error in tapply(X, FUN, simplify = T) : arguments must have same length.

> Result <– lapply(X,FUN1)
Error in get(as.character(FUN), mode = "function", envir = envir) : object 'F' of mode 'function' was not found.



Once I got the result, I would like to have a summary statistics of my function for each run. So, can I use

Summary(result) ?

Any help, please?
Kinds regards,
Fadhah

Sent from my iPhone
        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Help with lapply and tapply

Bert Gunter-2
In short, you really need to study the Help files carefully for both,
as you are using both tapply and lapply incorrectly. If that doesn't
work, I think you should spend some time with one of the many
excellent R tutorials on the web. You need to beef up your
understanding of the syntax.

But briefly:

1) the tapply call must be of the form tapply(x, fac, fun) where x is
atomic (i.e. a vector) and fac is a factor that splits x into groups.
You have obviously got the call all wrong.

2) And in the second, X must be a list or vector, not a matrix and the
function needs to have its elements as an argument, something like FUN
= function(x)FUN1(x, ... your other arguments...)

Cheers,
Bert


Bert Gunter

"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Fri, Mar 10, 2017 at 2:40 PM, Fadhah <[hidden email]> wrote:

> Dear all,
>
> Thank you in advance for your time and help. I quite new to R and face a problem with lapply and tapply functions.
> I simulated data and run the simulation 10 times to get 10 different simulated data. I have also built up my function and would like to apply this function to these 10 different data without repeating the code for 10 times. I now that we can use a loop family functions in R such as lapply or tapply functions. I tried both of them but both of them did not work. My data was stored as vector mode list.
>
> Here is my data:
>
> library(VineCopula)
> library(copula)
> Runs= 10 Saveas = vector(mode = "list", length = Runs)
>  pb <- txtProgressBar(min = 0, max = Runs, style = 3)
> for(j in 1:Runs){
>  setTxtProgressBar(pb, j)
> N=2000
>  dim=dim
>  U=runif(N, min=0,max=1)
>  X = matrix(NA, nrow=N, ncol=2)
> inds <- U < 0.7
>  X[inds, ] <- rCopula(sum(inds), claytonCopula(1, dim=2))
>  X[!inds, ] <- rCopula(N - sum(inds), frankCopula(4, dim=2))
> Saveas[[j]] = X }
> Then I built my function. I would like to apply this function to the 10 simulation run. That is I have 10 simulated data and would like to run my function to these data. I tried lapply and tapply function but I got  errors.
> This is my function:
>
> FUN1 <- EM_mixture_copula(data = Saveas[[j]],pi_1=pi_1,pi_2=pi_2,theta = theta,                Theta=Theta, tol = .00001, maxit = 1000)
> Here is my tries with the errors that I got:
>
>> result <- tapply(X,FUN1,simplify = T)
> Error in tapply(X, FUN, simplify = T) : arguments must have same length.
>
>> Result <– lapply(X,FUN1)
> Error in get(as.character(FUN), mode = "function", envir = envir) : object 'F' of mode 'function' was not found.
>
>
>
> Once I got the result, I would like to have a summary statistics of my function for each run. So, can I use
>
> Summary(result) ?
>
> Any help, please?
> Kinds regards,
> Fadhah
>
> Sent from my iPhone
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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.
Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Help with lapply and tapply

Michael Hannon-2
I think Bert's advice is sound.  Let me add a few, miscellaneous comments:

(1) Some people find "by" easier than "tapply".
(2) The "apply" function can, as I'm sure you (Bert) know, iterate
over a matrix.
(3) Hadley probably has better ways to do all of this (it's hard to keep up).

-- Mike


On Fri, Mar 10, 2017 at 9:22 PM, Bert Gunter <[hidden email]> wrote:

> In short, you really need to study the Help files carefully for both,
> as you are using both tapply and lapply incorrectly. If that doesn't
> work, I think you should spend some time with one of the many
> excellent R tutorials on the web. You need to beef up your
> understanding of the syntax.
>
> But briefly:
>
> 1) the tapply call must be of the form tapply(x, fac, fun) where x is
> atomic (i.e. a vector) and fac is a factor that splits x into groups.
> You have obviously got the call all wrong.
>
> 2) And in the second, X must be a list or vector, not a matrix and the
> function needs to have its elements as an argument, something like FUN
> = function(x)FUN1(x, ... your other arguments...)
>
> Cheers,
> Bert
>
>
> Bert Gunter
>
> "The trouble with having an open mind is that people keep coming along
> and sticking things into it."
> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
>
>
> On Fri, Mar 10, 2017 at 2:40 PM, Fadhah <[hidden email]> wrote:
>> Dear all,
>>
>> Thank you in advance for your time and help. I quite new to R and face a problem with lapply and tapply functions.
>> I simulated data and run the simulation 10 times to get 10 different simulated data. I have also built up my function and would like to apply this function to these 10 different data without repeating the code for 10 times. I now that we can use a loop family functions in R such as lapply or tapply functions. I tried both of them but both of them did not work. My data was stored as vector mode list.
>>
>> Here is my data:
>>
>> library(VineCopula)
>> library(copula)
>> Runs= 10 Saveas = vector(mode = "list", length = Runs)
>>  pb <- txtProgressBar(min = 0, max = Runs, style = 3)
>> for(j in 1:Runs){
>>  setTxtProgressBar(pb, j)
>> N=2000
>>  dim=dim
>>  U=runif(N, min=0,max=1)
>>  X = matrix(NA, nrow=N, ncol=2)
>> inds <- U < 0.7
>>  X[inds, ] <- rCopula(sum(inds), claytonCopula(1, dim=2))
>>  X[!inds, ] <- rCopula(N - sum(inds), frankCopula(4, dim=2))
>> Saveas[[j]] = X }
>> Then I built my function. I would like to apply this function to the 10 simulation run. That is I have 10 simulated data and would like to run my function to these data. I tried lapply and tapply function but I got  errors.
>> This is my function:
>>
>> FUN1 <- EM_mixture_copula(data = Saveas[[j]],pi_1=pi_1,pi_2=pi_2,theta = theta,                Theta=Theta, tol = .00001, maxit = 1000)
>> Here is my tries with the errors that I got:
>>
>>> result <- tapply(X,FUN1,simplify = T)
>> Error in tapply(X, FUN, simplify = T) : arguments must have same length.
>>
>>> Result <– lapply(X,FUN1)
>> Error in get(as.character(FUN), mode = "function", envir = envir) : object 'F' of mode 'function' was not found.
>>
>>
>>
>> Once I got the result, I would like to have a summary statistics of my function for each run. So, can I use
>>
>> Summary(result) ?
>>
>> Any help, please?
>> Kinds regards,
>> Fadhah
>>
>> Sent from my iPhone
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> [hidden email] 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.
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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.
Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Help with lapply and tapply

Rui Barradas
Also, the OP's FUN1 is NOT a function. It's the result of a function
call. A function would be

FUN1 <- function(x) EM_mixture_copula(...)

Hope this helps,

Rui Barradas

Em 11-03-2017 10:29, Michael Hannon escreveu:

> I think Bert's advice is sound.  Let me add a few, miscellaneous comments:
>
> (1) Some people find "by" easier than "tapply".
> (2) The "apply" function can, as I'm sure you (Bert) know, iterate
> over a matrix.
> (3) Hadley probably has better ways to do all of this (it's hard to keep up).
>
> -- Mike
>
>
> On Fri, Mar 10, 2017 at 9:22 PM, Bert Gunter <[hidden email]> wrote:
>> In short, you really need to study the Help files carefully for both,
>> as you are using both tapply and lapply incorrectly. If that doesn't
>> work, I think you should spend some time with one of the many
>> excellent R tutorials on the web. You need to beef up your
>> understanding of the syntax.
>>
>> But briefly:
>>
>> 1) the tapply call must be of the form tapply(x, fac, fun) where x is
>> atomic (i.e. a vector) and fac is a factor that splits x into groups.
>> You have obviously got the call all wrong.
>>
>> 2) And in the second, X must be a list or vector, not a matrix and the
>> function needs to have its elements as an argument, something like FUN
>> = function(x)FUN1(x, ... your other arguments...)
>>
>> Cheers,
>> Bert
>>
>>
>> Bert Gunter
>>
>> "The trouble with having an open mind is that people keep coming along
>> and sticking things into it."
>> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
>>
>>
>> On Fri, Mar 10, 2017 at 2:40 PM, Fadhah <[hidden email]> wrote:
>>> Dear all,
>>>
>>> Thank you in advance for your time and help. I quite new to R and face a problem with lapply and tapply functions.
>>> I simulated data and run the simulation 10 times to get 10 different simulated data. I have also built up my function and would like to apply this function to these 10 different data without repeating the code for 10 times. I now that we can use a loop family functions in R such as lapply or tapply functions. I tried both of them but both of them did not work. My data was stored as vector mode list.
>>>
>>> Here is my data:
>>>
>>> library(VineCopula)
>>> library(copula)
>>> Runs= 10 Saveas = vector(mode = "list", length = Runs)
>>>   pb <- txtProgressBar(min = 0, max = Runs, style = 3)
>>> for(j in 1:Runs){
>>>   setTxtProgressBar(pb, j)
>>> N=2000
>>>   dim=dim
>>>   U=runif(N, min=0,max=1)
>>>   X = matrix(NA, nrow=N, ncol=2)
>>> inds <- U < 0.7
>>>   X[inds, ] <- rCopula(sum(inds), claytonCopula(1, dim=2))
>>>   X[!inds, ] <- rCopula(N - sum(inds), frankCopula(4, dim=2))
>>> Saveas[[j]] = X }
>>> Then I built my function. I would like to apply this function to the 10 simulation run. That is I have 10 simulated data and would like to run my function to these data. I tried lapply and tapply function but I got  errors.
>>> This is my function:
>>>
>>> FUN1 <- EM_mixture_copula(data = Saveas[[j]],pi_1=pi_1,pi_2=pi_2,theta = theta,                Theta=Theta, tol = .00001, maxit = 1000)
>>> Here is my tries with the errors that I got:
>>>
>>>> result <- tapply(X,FUN1,simplify = T)
>>> Error in tapply(X, FUN, simplify = T) : arguments must have same length.
>>>
>>>> Result <– lapply(X,FUN1)
>>> Error in get(as.character(FUN), mode = "function", envir = envir) : object 'F' of mode 'function' was not found.
>>>
>>>
>>>
>>> Once I got the result, I would like to have a summary statistics of my function for each run. So, can I use
>>>
>>> Summary(result) ?
>>>
>>> Any help, please?
>>> Kinds regards,
>>> Fadhah
>>>
>>> Sent from my iPhone
>>>          [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> [hidden email] 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.
>>
>> ______________________________________________
>> [hidden email] 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.
>
> ______________________________________________
> [hidden email] 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.
>

______________________________________________
[hidden email] 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.
Loading...