Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

which OO programming style in R will result readable to a Python programmer?

I'm author of the logging package on CRAN, I don't see myself as an R programmer, so I tried to make it as code-compatible with the Python standard logging package as I could, but now I have a question. and I hope it will give me the chance to learn some more R!

it's about hierarchical loggers. in Python I would create a logger and send it logging records:

l = logging.getLogger("some.lower.name")
l.debug("test")
l.info("some")
l.warn("say no")

In my R package instead you do not create a logger to which you send messages, you invoke a function where one of the arguments is the name of the logger. something like

logdebug("test", logger="some.lower.name")
loginfo("some", logger="some.lower.name")
logwarn("say no", logger="some.lower.name")

the problem is that you have to repeat the name of the logger each time you want to send it a logging message. I was thinking, I might create a partially applied function object and invoke that instead, something like

logdebug <- curry(logging::logdebug, logger="some.lower.logger")

but then I need doing so for all debugging functions...

how would you R users approach this?

like image 787
mariotomo Avatar asked Feb 10 '11 15:02

mariotomo


People also ask

Can you do OOP in R?

OOP in R. Base R provides three OOP systems: S3, S4, and reference classes (RC): S3 is R's first OOP system, and is described in Statistical Models in S. S3 is an informal implementation of functional OOP and relies on common conventions rather than ironclad guarantees.

What is OOP programming in Python?

In Python, object-oriented Programming (OOPs) is a programming paradigm that uses objects and classes in programming. It aims to implement real-world entities like inheritance, polymorphisms, encapsulation, etc. in the programming.

Does Python allow you to program in a structured style?

Structured Programming in PythonStructured programming is a program written with only the three constructions sequence, decision (if.. elif statements), and repetition (while or for statements). Important: the body of a Python if, elif, while, or for statement is indicated by indenting four spaces.

Does R integrate well with Python?

package comes with a Python engine you can use in R Markdown. Reticulate allows you to run chunks of Python code, print Python output, access Python objects, and so on. Easy, right? You can import any Python library and write any Python code you want, and then access the variables and functions declared with R.


1 Answers

Sounds like a job for a reference class ?setRefClass, ?ReferenceClasses

Logger <- setRefClass("Logger",
                  fields=list(name = "character"),
                  methods=list(
                    log = function(level, ...) 
                          { levellog(level, ..., logger=name) },
                    debug = function(...) { log("DEBUG", ...) },
                    info = function(...) { log("INFO", ...) },
                    warn = function(...) { log("WARN", ...) },
                    error = function(...) { log("ERROR", ...) }
                    ))

and then

> basicConfig()
> l <- Logger$new(name="hierarchic.logger.name")
> l$debug("oops")
> l$info("oops")
2011-02-11 11:54:05 NumericLevel(INFO):hierarchic.logger.name:oops
> l$warn("oops")
2011-02-11 11:54:11 NumericLevel(WARN):hierarchic.logger.name:oops
> 
like image 164
Martin Morgan Avatar answered Nov 05 '22 19:11

Martin Morgan