Adrienne Wootten
2010-Dec-02 21:36 UTC
[R] parLapply - Error in do.call("fun", lapply(args, enquote)) : could not find function "fun"
Hello everybody, I've got a bit of a problem with parLapply that's left me scratching my head today. I've tried this in R 2.11 and the 23 bit Revolution R Enterprise and gotten the same result, OS in question is Windows XP, the package involved is the snow package. I've got a list of 20 rain/no rain (1/0) situations for these two stations i and j, all the items in this list look like this, each of these have a different order:> setin[[20]]ri_1 rj_1 29 0 0 15 0 0 3 1 0 31 0 0 4 0 0 1 1 1 18 1 1 21 0 0 27 0 0 24 0 0 6 0 1 9 1 1 5 0 0 30 0 0 25 0 0 28 0 0 19 1 1 8 0 0 17 1 1 12 0 0 10 0 0 22 1 1 23 0 0 7 1 1 14 0 0 26 0 0 13 0 0 2 0 1 11 1 1 20 1 1 16 1 1 What I'm trying to do is to apply the same function I crafted to all the items in the list with parLapply. I'm using this instead of apply since it allows me to test using parallel running R, and because it runs faster than lapply. M_set <- parLapply(cl,setin,M.set.find,month=month,n1=n1,n2=n2,MC_1st_obs2=MC_1st_obs2) using this it gives me the follow error: Error in do.call("fun", lapply(args, enquote)) : could not find function "fun" but, this works correctly when I just use lapply (it's just a bit slower than I need it to be). Also, I know that the clusterCall function works fine with my homemade function because all the nodes of the cluster return the appropriate results when I try this: clusterCall(cl,M.set.find,setin=setin[[1]],month=month,n1=n1,n2=n2,MC_1st_obs2=MC_1st_obs2) but that will only let me do this calculation one at a time. I perused the earlier post about this error, and that doesn't work for me, I don't do anything anywhere in my code to mess with "c". I also know that my code is producing the rest of the required parts for the function correctly. I wish I could provide more on what's happened, but the code involved is somewhat extensive. Any ideas all of you have would be wonderful. Thanks in advance! A -- Adrienne Wootten Graduate Research Assistant State Climate Office of North Carolina Department of Marine, Earth and Atmospheric Sciences North Carolina State University [[alternative HTML version deleted]]
Adrienne Wootten
2011-Jan-03 17:18 UTC
[R] parLapply - Error in do.call("fun", lapply(args, enquote)) : could not find function "fun"
Alright, I found the solution on my own at least it seems that way. Here is what I discovered for future reference in the R-help archive. The issue with parLapply comes in with the docall function in parLapply,> parLapplyfunction(cl, x, fun, ...){ docall(c, clusterApply(cl, splitList(x, length(cl)), lapply, fun, ...)) } What I found to be happening is although I had done nothing to assign a value to c (i.e. c <- something), c was altered to be a numerical value. Taking the docall function out of parLapply and modifying it to the following allowed it to function properly docall("c",clusterApply(cl,splitList(x,length(cl)),lapply,fun,...)) docall will find the right function like this and it works appropriately as well. I don't know how exactly that c, without quotes, was modified to begin with, since my code showed nothing visibly modifying it. Regardless, this is what worked for me. A On Thu, Dec 2, 2010 at 4:36 PM, Adrienne Wootten <amwootte@ncsu.edu> wrote:> Hello everybody, > > I've got a bit of a problem with parLapply that's left me scratching my > head today. I've tried this in R 2.11 and the 23 bit Revolution R > Enterprise and gotten the same result, OS in question is Windows XP, the > package involved is the snow package. > > I've got a list of 20 rain/no rain (1/0) situations for these two stations > i and j, all the items in this list look like this, each of these have a > different order: > > > setin[[20]] > ri_1 rj_1 > 29 0 0 > 15 0 0 > 3 1 0 > 31 0 0 > 4 0 0 > 1 1 1 > 18 1 1 > 21 0 0 > 27 0 0 > 24 0 0 > 6 0 1 > 9 1 1 > 5 0 0 > 30 0 0 > 25 0 0 > 28 0 0 > 19 1 1 > 8 0 0 > 17 1 1 > 12 0 0 > 10 0 0 > 22 1 1 > 23 0 0 > 7 1 1 > 14 0 0 > 26 0 0 > 13 0 0 > 2 0 1 > 11 1 1 > 20 1 1 > 16 1 1 > > What I'm trying to do is to apply the same function I crafted to all the > items in the list with parLapply. I'm using this instead of apply since it > allows me to test using parallel running R, and because it runs faster than > lapply. > > M_set <- > parLapply(cl,setin,M.set.find,month=month,n1=n1,n2=n2,MC_1st_obs2=MC_1st_obs2) > > using this it gives me the follow error: > > Error in do.call("fun", lapply(args, enquote)) : > could not find function "fun" > > but, this works correctly when I just use lapply (it's just a bit slower > than I need it to be). Also, I know that the clusterCall function works > fine with my homemade function because all the nodes of the cluster return > the appropriate results when I try this: > > > clusterCall(cl,M.set.find,setin=setin[[1]],month=month,n1=n1,n2=n2,MC_1st_obs2=MC_1st_obs2) > > but that will only let me do this calculation one at a time. > > I perused the earlier post about this error, and that doesn't work for me, > I don't do anything anywhere in my code to mess with "c". I also know that > my code is producing the rest of the required parts for the function > correctly. > > I wish I could provide more on what's happened, but the code involved is > somewhat extensive. Any ideas all of you have would be wonderful. > > Thanks in advance! > > A > -- > Adrienne Wootten > Graduate Research Assistant > State Climate Office of North Carolina > Department of Marine, Earth and Atmospheric Sciences > North Carolina State University > >-- Adrienne Wootten Graduate Research Assistant State Climate Office of North Carolina Department of Marine, Earth and Atmospheric Sciences North Carolina State University [[alternative HTML version deleted]]