哪个OO编程风格在R中会导致可读性给Python程序员? [英] which OO programming style in R will result readable to a Python programmer?

查看:93
本文介绍了哪个OO编程风格在R中会导致可读性给Python程序员?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是CRAN的记录软件包的作者,我不认为自己是R程序员,所以我试图使它与代码兼容的 Python标准日志包,但现在我有一个问题。我希望它会给我机会学习一些R!



这是关于分层记录器。在Python中我将创建一个日志记录并发送日志记录:

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

在我的R包中,而不是创建一个发送消息的记录器,你调用一个函数,其中一个参数是记录器的名称。类似

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

问题是每次要向记录器发送记录消息时,必须重复记录器的名称。我在想,我可能创建一个部分应用函数对象,并调用,而不是像

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

但我需要这样做所有调试函数...



你的R用户如何处理这个问题?

解决方案

听起来像一个引用类?setRefClass ?ReferenceClasses的工作

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

,然后

  basicConfig()
> l< - Logger $ new(name =hierarchicalic.logger.name)
> l $ debug(oops)
> l $ info(oops)
2011-02-11 11:54:05 NumericLevel(INFO):hierarchicalic.logger.name:oops
> l $ warn(oops)
2011-02-11 11:54:11 NumericLevel(WARN):hierarchicalic.logger.name:oops
>


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?

解决方案

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
> 

这篇关于哪个OO编程风格在R中会导致可读性给Python程序员?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆