My modified function looks below : Lapply_me = function(X = X, FUN = FUN, Apply_MC = FALSE, ...) { if (Apply_MC) { return(mclapply(X, FUN, ...)) } else { if (any(names(list(...)) == 'mc.cores')) { myList = list(...)[!names(list(...)) %in% 'mc.cores'] } return(lapply(X, FUN, myList)) } } Here, I am not passing ... anymore rather passing myList On Sun, Mar 4, 2018 at 10:37 PM, Eric Berger <ericjberger at gmail.com> wrote:> Hi Christofer, > Before you made the change that I suggested, your program was stopping at > the statement: list(...) = list(..) .etc > This means that it never tried to execute the statement: > return(lapply(X,FUN,...)) > Now that you have made the change, it gets past the first statement and > tries to execute the statement: return(lapply(X,FUN,...)). > That attempt is generating the error message because whatever you are > passing in as the FUN argument is not expecting extra arguments. > > HTH, > Eric > > > On Sun, Mar 4, 2018 at 6:52 PM, Christofer Bogaso > <bogaso.christofer at gmail.com> wrote: >> >> @Eric - with this approach I am getting below error : >> >> Error in FUN(X[[i]], ...) : unused argument (list()) >> >> On Sun, Mar 4, 2018 at 10:18 PM, Eric Berger <ericjberger at gmail.com> >> wrote: >> > Hi Christofer, >> > You cannot assign to list(...). You can do the following >> > >> > myList <- list(...)[!names(list(...)) %in% 'mc.cores'] >> > >> > HTH, >> > Eric >> > >> > On Sun, Mar 4, 2018 at 6:38 PM, Christofer Bogaso >> > <bogaso.christofer at gmail.com> wrote: >> >> >> >> Hi, >> >> >> >> As an example, I want to create below kind of custom Function which >> >> either be mclapply pr lapply >> >> >> >> Lapply_me = function(X = X, FUN = FUN, ..., Apply_MC = FALSE) { >> >> if (Apply_MC) { >> >> return(mclapply(X, FUN, ...)) >> >> } else { >> >> if (any(names(list(...)) == 'mc.cores')) { >> >> list(...) = list(...)[!names(list(...)) %in% 'mc.cores'] >> >> } >> >> return(lapply(X, FUN, ...)) >> >> } >> >> } >> >> >> >> However when Apply_MC = FALSE it generates below error saying : >> >> >> >> '...' used in an incorrect context >> >> >> >> >> >> Appreciate if you can help me with the correct approach. Thanks, >> >> >> >> >> >> On Sun, Mar 4, 2018 at 9:34 PM, Duncan Murdoch >> >> <murdoch.duncan at gmail.com> >> >> wrote: >> >> > On 04/03/2018 10:39 AM, Christofer Bogaso wrote: >> >> >> >> >> >> Hi again, >> >> >> >> >> >> I am looking for some way to alternately use 2 related functions, >> >> >> based on some ifelse() condition. >> >> >> >> >> >> For example, I have 2 functions mclapply() and lapply() >> >> >> >> >> >> However, mclapply() function has one extra parameter 'mc.cores' >> >> >> which >> >> >> lapply doesnt not have. >> >> >> >> >> >> I know when mc.cores = 1, these 2 functions are essentially same, >> >> >> however I am looking for more general way to control them within >> >> >> ifelse() constion >> >> >> >> >> >> Can someone please help me how can I use them within ifelse() >> >> >> condition. >> >> > >> >> > >> >> > Don't. ifelse() usually evaluates *both* the true and false values, >> >> > and >> >> > then selects entries from each. Just use an if statement. >> >> > >> >> > Duncan Murdoch >> >> >> >> ______________________________________________ >> >> 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. >> > >> > > >
That's fine. The issue is how you called Lapply_me(). What did you pass as the argument to FUN? And if you did not pass anything that how is FUN declared? You have not shown that in your email. On Sun, Mar 4, 2018 at 7:11 PM, Christofer Bogaso < bogaso.christofer at gmail.com> wrote:> My modified function looks below : > > Lapply_me = function(X = X, FUN = FUN, Apply_MC = FALSE, ...) { > if (Apply_MC) { > return(mclapply(X, FUN, ...)) > } else { > if (any(names(list(...)) == 'mc.cores')) { > myList = list(...)[!names(list(...)) %in% 'mc.cores'] > } > return(lapply(X, FUN, myList)) > } > } > > Here, I am not passing ... anymore rather passing myList > > On Sun, Mar 4, 2018 at 10:37 PM, Eric Berger <ericjberger at gmail.com> > wrote: > > Hi Christofer, > > Before you made the change that I suggested, your program was stopping at > > the statement: list(...) = list(..) .etc > > This means that it never tried to execute the statement: > > return(lapply(X,FUN,...)) > > Now that you have made the change, it gets past the first statement and > > tries to execute the statement: return(lapply(X,FUN,...)). > > That attempt is generating the error message because whatever you are > > passing in as the FUN argument is not expecting extra arguments. > > > > HTH, > > Eric > > > > > > On Sun, Mar 4, 2018 at 6:52 PM, Christofer Bogaso > > <bogaso.christofer at gmail.com> wrote: > >> > >> @Eric - with this approach I am getting below error : > >> > >> Error in FUN(X[[i]], ...) : unused argument (list()) > >> > >> On Sun, Mar 4, 2018 at 10:18 PM, Eric Berger <ericjberger at gmail.com> > >> wrote: > >> > Hi Christofer, > >> > You cannot assign to list(...). You can do the following > >> > > >> > myList <- list(...)[!names(list(...)) %in% 'mc.cores'] > >> > > >> > HTH, > >> > Eric > >> > > >> > On Sun, Mar 4, 2018 at 6:38 PM, Christofer Bogaso > >> > <bogaso.christofer at gmail.com> wrote: > >> >> > >> >> Hi, > >> >> > >> >> As an example, I want to create below kind of custom Function which > >> >> either be mclapply pr lapply > >> >> > >> >> Lapply_me = function(X = X, FUN = FUN, ..., Apply_MC = FALSE) { > >> >> if (Apply_MC) { > >> >> return(mclapply(X, FUN, ...)) > >> >> } else { > >> >> if (any(names(list(...)) == 'mc.cores')) { > >> >> list(...) = list(...)[!names(list(...)) %in% 'mc.cores'] > >> >> } > >> >> return(lapply(X, FUN, ...)) > >> >> } > >> >> } > >> >> > >> >> However when Apply_MC = FALSE it generates below error saying : > >> >> > >> >> '...' used in an incorrect context > >> >> > >> >> > >> >> Appreciate if you can help me with the correct approach. Thanks, > >> >> > >> >> > >> >> On Sun, Mar 4, 2018 at 9:34 PM, Duncan Murdoch > >> >> <murdoch.duncan at gmail.com> > >> >> wrote: > >> >> > On 04/03/2018 10:39 AM, Christofer Bogaso wrote: > >> >> >> > >> >> >> Hi again, > >> >> >> > >> >> >> I am looking for some way to alternately use 2 related functions, > >> >> >> based on some ifelse() condition. > >> >> >> > >> >> >> For example, I have 2 functions mclapply() and lapply() > >> >> >> > >> >> >> However, mclapply() function has one extra parameter 'mc.cores' > >> >> >> which > >> >> >> lapply doesnt not have. > >> >> >> > >> >> >> I know when mc.cores = 1, these 2 functions are essentially same, > >> >> >> however I am looking for more general way to control them within > >> >> >> ifelse() constion > >> >> >> > >> >> >> Can someone please help me how can I use them within ifelse() > >> >> >> condition. > >> >> > > >> >> > > >> >> > Don't. ifelse() usually evaluates *both* the true and false > values, > >> >> > and > >> >> > then selects entries from each. Just use an if statement. > >> >> > > >> >> > Duncan Murdoch > >> >> > >> >> ______________________________________________ > >> >> 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. > >> > > >> > > > > > >[[alternative HTML version deleted]]
Below is my full implementation (tried to make it simple as for demonstration) Lapply_me = function(X = X, FUN = FUN, Apply_MC = FALSE, ...) { if (Apply_MC) { return(mclapply(X, FUN, ...)) } else { if (any(names(list(...)) == 'mc.cores')) { myList = list(...)[!names(list(...)) %in% 'mc.cores'] } return(lapply(X, FUN, myList)) } } Lapply_me(as.list(1:4), function(xx) { if (xx == 1) return('a') if (xx == 2) return('b') if (xx == 3) return('c') if (xx == 4) return('d') }, Apply_MC = FALSE, mc.cores = 2) Error message : Error in FUN(X[[i]], ...) : unused argument (list()) Kindly note that, with Apply_MC = TRUE, it is working perfectly. On Sun, Mar 4, 2018 at 10:45 PM, Eric Berger <ericjberger at gmail.com> wrote:> That's fine. The issue is how you called Lapply_me(). What did you pass as > the argument to FUN? > And if you did not pass anything that how is FUN declared? > You have not shown that in your email. > > > > > On Sun, Mar 4, 2018 at 7:11 PM, Christofer Bogaso > <bogaso.christofer at gmail.com> wrote: >> >> My modified function looks below : >> >> Lapply_me = function(X = X, FUN = FUN, Apply_MC = FALSE, ...) { >> if (Apply_MC) { >> return(mclapply(X, FUN, ...)) >> } else { >> if (any(names(list(...)) == 'mc.cores')) { >> myList = list(...)[!names(list(...)) %in% 'mc.cores'] >> } >> return(lapply(X, FUN, myList)) >> } >> } >> >> Here, I am not passing ... anymore rather passing myList >> >> On Sun, Mar 4, 2018 at 10:37 PM, Eric Berger <ericjberger at gmail.com> >> wrote: >> > Hi Christofer, >> > Before you made the change that I suggested, your program was stopping >> > at >> > the statement: list(...) = list(..) .etc >> > This means that it never tried to execute the statement: >> > return(lapply(X,FUN,...)) >> > Now that you have made the change, it gets past the first statement and >> > tries to execute the statement: return(lapply(X,FUN,...)). >> > That attempt is generating the error message because whatever you are >> > passing in as the FUN argument is not expecting extra arguments. >> > >> > HTH, >> > Eric >> > >> > >> > On Sun, Mar 4, 2018 at 6:52 PM, Christofer Bogaso >> > <bogaso.christofer at gmail.com> wrote: >> >> >> >> @Eric - with this approach I am getting below error : >> >> >> >> Error in FUN(X[[i]], ...) : unused argument (list()) >> >> >> >> On Sun, Mar 4, 2018 at 10:18 PM, Eric Berger <ericjberger at gmail.com> >> >> wrote: >> >> > Hi Christofer, >> >> > You cannot assign to list(...). You can do the following >> >> > >> >> > myList <- list(...)[!names(list(...)) %in% 'mc.cores'] >> >> > >> >> > HTH, >> >> > Eric >> >> > >> >> > On Sun, Mar 4, 2018 at 6:38 PM, Christofer Bogaso >> >> > <bogaso.christofer at gmail.com> wrote: >> >> >> >> >> >> Hi, >> >> >> >> >> >> As an example, I want to create below kind of custom Function which >> >> >> either be mclapply pr lapply >> >> >> >> >> >> Lapply_me = function(X = X, FUN = FUN, ..., Apply_MC = FALSE) { >> >> >> if (Apply_MC) { >> >> >> return(mclapply(X, FUN, ...)) >> >> >> } else { >> >> >> if (any(names(list(...)) == 'mc.cores')) { >> >> >> list(...) = list(...)[!names(list(...)) %in% 'mc.cores'] >> >> >> } >> >> >> return(lapply(X, FUN, ...)) >> >> >> } >> >> >> } >> >> >> >> >> >> However when Apply_MC = FALSE it generates below error saying : >> >> >> >> >> >> '...' used in an incorrect context >> >> >> >> >> >> >> >> >> Appreciate if you can help me with the correct approach. Thanks, >> >> >> >> >> >> >> >> >> On Sun, Mar 4, 2018 at 9:34 PM, Duncan Murdoch >> >> >> <murdoch.duncan at gmail.com> >> >> >> wrote: >> >> >> > On 04/03/2018 10:39 AM, Christofer Bogaso wrote: >> >> >> >> >> >> >> >> Hi again, >> >> >> >> >> >> >> >> I am looking for some way to alternately use 2 related functions, >> >> >> >> based on some ifelse() condition. >> >> >> >> >> >> >> >> For example, I have 2 functions mclapply() and lapply() >> >> >> >> >> >> >> >> However, mclapply() function has one extra parameter 'mc.cores' >> >> >> >> which >> >> >> >> lapply doesnt not have. >> >> >> >> >> >> >> >> I know when mc.cores = 1, these 2 functions are essentially same, >> >> >> >> however I am looking for more general way to control them within >> >> >> >> ifelse() constion >> >> >> >> >> >> >> >> Can someone please help me how can I use them within ifelse() >> >> >> >> condition. >> >> >> > >> >> >> > >> >> >> > Don't. ifelse() usually evaluates *both* the true and false >> >> >> > values, >> >> >> > and >> >> >> > then selects entries from each. Just use an if statement. >> >> >> > >> >> >> > Duncan Murdoch >> >> >> >> >> >> ______________________________________________ >> >> >> 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. >> >> > >> >> > >> > >> > > >