[R] warning on generic function when building R package
Duncan Murdoch
murdoch.duncan at gmail.com
Tue Oct 27 21:05:46 CET 2015
On 27/10/2015 3:52 PM, David Stevens wrote:
> Sorry to be a late comer to this problem but I'm having a similar
> issue. My function is called by ode from deSolve
>
> ADM1_C <- function(t,state,parameters,...){
>
> with(as.list(c(state,parameters)), {
> # do some stuff here and return a list containing a vector of
> derivatives to ode
> ...
> })
> }
> in which 't' is a time and 'state' and 'parameters' are numeric vectors
> with each element named. When I invoke the solver,
>
> times <- d.df$time
> out <- as.data.frame(ode(y = state,times = times,func = ADM1_C,parms =
> parameters))
>
> I get ~three Note:s for each value in 'state' (sometimes more). The
> calculation is successful but the issue is a little puzzling.
> Here's 'state'
> state
> Ssu Saa Sfa Sva Sbu Spro Sac Sh2
> Sch4 Sic
> 0.300000 0.001000 0.300000 0.300000 0.300000 0.300000 0.300000 0.000001
> 0.000010 0.040000
> Sin Si Xc Xch Xpr Xli Xsu Xaa
> Xfa Xc4
> 0.010000 0.020000 0.300000 0.026000 0.300000 0.030000 0.400000 1.100000
> 0.200000 0.410000
> Xpro Xac Xh2 Xi Scation Sanion Sva_m Sbu_m
> Spro_m Sac_m
> 0.137000 0.700000 0.010000 5.000000 0.040000 0.020000 0.090000 0.090000
> 0.074000 0.169000
> Shco3_m Snh3 Sgas_h2 Sgas_ch4 Sgas_co2
> 0.009700 0.016000 0.020000 0.020000 0.037600
>
> The messages are something like this ...
> Note: no visible binding for global variable 'Sin'
> Note: no visible binding for global variable 'Snh3'
> Note: no visible binding for global variable 'Scation'
> Note: no visible binding for global variable 'Shco3_m'
> .... (~130 rows of these messages)
I don't see how this has anything to do with the previous problem.
>
> Neither Duncan's nor Jim's solution solved the problem. I can't change
> (at least I don't think so) how ode(...) calls the function except via
> the documentation. Any ideas? Does it matter? Could it be ode strips out
> the names, but only sometimes?
You will need to post something that we can reproduce if you want help
with it. (Please do this on a new thread, since you really have nothing
to do with generic functions as far as I can see.)
Or you can add cat() and print() statements to your function (or set
breakpoints in a debugger) and you'll be able to see what it's getting.
Duncan Murdoch
>
> signed Grasping at Straws (David)
>
> David K Stevens, P.E., Ph.D.
> Professor and Head, Environmental Engineering
> Civil and Environmental Engineering
> Utah Water Research Laboratory
> 8200 Old Main Hill
> Logan, UT 84322-8200
> 435 797 3229 - voice
> 435 797 1363 - fax
> david.stevens at usu.edu
>
>
> On 10/19/2015 2:32 PM, carol white via R-help wrote:
>> In effect, this works
>> but whether I use x or x.init, y or y.init in plot.func, I get
>>
>> no visible binding for global variable ‘x.init’no visible binding for global variable ‘y.init’
>> Regards,
>>
>> On Monday, October 19, 2015 9:59 PM, Duncan Murdoch <murdoch.duncan at gmail.com> wrote:
>>
>>
>> On 19/10/2015 3:50 PM, carol white wrote:
>>> Thanks Murdoch.
>>>
>>> defining
>>> plot.func<- function(x=x.init, y=y.init, arg3, arg4, "title", col, arg5)
>>>
>>> and if plot doesn't take the exact parameters of plot.func but modified
>>> of these parameters
>>> plot(x=x.pt,y=y.pt,xlim = c(0, 10), ylim = c(0,1), xlab= "xlab",
>>> ylab="ylab", main = "title", col = col,type = "l")
>>>
>>> then, how to define and invoke to be consisent?
>> I don't really understand your question, but this is all about the
>> function header for plot.func, not the call you make to plot(). You
>> need to name the first argument as "x", you need to include "..." as an
>> open argument, and you need a legal header. So this would be okay:
>>
>>
>> plot.func<- function(x=x.init, y=y.init, arg3, arg4,
>> main = "title", # can't skip the arg name
>> col, arg5,
>> ...) { # can't skip the dots
>>
>> Duncan Murdoch
>>
>>> Regards,
>>>
>>> On Monday, October 19, 2015 7:45 PM, Duncan Murdoch
>>> <murdoch.duncan at gmail.com> wrote:
>>>
>>>
>>> On 19/10/2015 1:29 PM, carol white via R-help wrote:
>>>
>>>> Hi,I have invoked plot in a function (plot.func) as follows but when I
>>> check the built package, I get a warning:
>>>> plot(x.pt,y.pt,xlim = c(0, 10), ylim = c(0,1), xlab= "xlab",
>>> ylab="ylab", main = "title", col = col,type = "l")
>>>> R CMD check my.package
>>>> checking S3 generic/method consistency ... WARNING
>>>> plot:
>>>> function(x, ...)
>>>> plot.func:
>>>> function(x.pt, y.pt, arg3, arg4, "title", col, arg5)
>>>>
>>>> See section ‘Generic functions and methods’ in the ‘Writing R
>>>> Extensions’ manual.
>>>> Which plot argument is illegitimate or missing and how to eliminate
>>> the warning?
>>>
>>>
>>> The first argument to plot.func needs to be called "x" if you want to
>>> use it as a method. Method signatures need to be consistent with the
>>> generic signature.
>>>
>>> Duncan Murdoch
>>>
>>>
>>>
>>>
>>
>>
>>
>> [[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.
>
> ______________________________________________
> 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