我想创建一个R软件包,在安装后会显示维护者的联系信息,并要求用户在我们的安装列表中对其进行计数。在用户第一次调用我们的一个函数时运行代码也是可以接受的,而不是立即安装。无论哪种方式,此消息应该只出现一次(除非用户重新安装/更新包)。
我考虑过的事情:
有没有好办法呢?
答案 0 :(得分:5)
这可以不止一次运行,但只能在有限的时间内运行,所以也许它已经足够了。
将此代码添加到您的软件包中,它将在安装后的7天内随时发送消息,然后在更新软件包之前不再发出消息。
它的工作原理是将创建安装文件的时间与当前时间进行比较。它不需要对任何目录的写权限,只需读取,因此它通常应该正常工作。
.onLoad <- function(libname, pkgname) {
ctime <- file.info(find.package(pkgname, libname))$ctime
if (difftime(Sys.time(), ctime, unit = "day") < 7)
packageStartupMessage("This msg will go away one week after installing this package")
}
答案 1 :(得分:4)
您可能需要咬紧牙关并在会话中存储状态信息,以便只显示一次。
一些可能有用的软件包:
但我不确定哪一个读取和写入。也许最后一个适合这个法案。
编辑:事实证明,即使pkgconfig也不会在会话中保留值。当我控制要编写的目录或数据库时,我用公司本地代码解决了这个问题。对于公共和可移植代码,它有点困难。我仍然认为有一个包存储在所有主要操作系统上的用户级配置,但我现在不能记住这个名称。
编辑2:通过向Gabor Csardi点头来刷新我的记忆,rappdirs解决了可移植为每个用户提供配置位置的问题(与其他技巧一样,相应的Python库的端口)。将它与一个简单的cvs或rds文件结合起来存储,当你最后一次显示消息时,你现在可以将它显示为一次并且只显示一次。包升级后甚至没有再次。
答案 2 :(得分:1)
以下代码允许您在包库中创建文件:
activate_file = paste(system.file('extdata', package = 'your_package'), 'activated.txt', sep = '/')
file.exists(activate_file)
# FALSE
file.create(activate_file)
file.exists(activate_file)
# TRUE
现在,您可以检查.onLoad
是否存在activated.txt
文件。第一次显示消息,然后创建activated.txt
,并在下次使用包时onload
函数看到该文件并可以跳过该消息。
优点:
缺点:
activated
文件,从而再次显示该消息。如果这是不可接受的,您可以尝试找到一个持久的位置,例如在家庭驱动器中执行此操作(例如~/.your_package/activated.txt
)。然后面临的挑战是使这个平台独立。也许请查看path.expand(~)
以获取当前用户的主驱动器,不确定这是否适用于Windows。