R包开发:CRAN政策下临时文件清理要求及TMPDIR疑问
CRAN包开发政策相关问题解答
核心规则解析
先明确CRAN政策的中文翻译:
软件包不得写入用户主目录空间(包括剪贴板),除R会话临时目录外,不得写入文件系统其他位置(或安装期间写入TMPDIR指向的位置:此类使用应清理)
1. R会话临时目录的文件是否需要清理?
不需要。R会话临时目录(由tempdir()指向)的特性是:当R会话结束时,系统会自动清理该目录下的所有文件。CRAN政策允许使用这个目录,且没有要求包主动清理其中的文件——会话结束后的自动清理机制已满足合规要求。
2. 清理要求的适用范围
清理要求仅针对「安装期间写入TMPDIR的文件」。括号里的「此类使用应清理」特指前面的「安装期间写入TMPDIR指向的位置」,和R运行时的会话临时目录无关。
3. 示例中的SQLite临时文件是否需要删除?
不需要。你用tempfile()生成的路径属于R会话临时目录,会话结束后会被自动清理。即使在函数运行期间不主动关闭连接、删除文件,也符合CRAN政策要求。当然如果函数逻辑里提前不再需要这个文件,主动清理(比如执行RSQLite::dbDisconnect(testdb); file.remove(RSQLite::dbname(testdb)))是更严谨的做法,但这并非CRAN强制要求。
4. 什么是安装期间的TMPDIR?
TMPDIR是系统环境变量指向的临时目录,R包在安装阶段(比如编译C/C++代码、生成临时安装文件时)可能会用到这个目录。由于安装过程独立于用户的R运行会话,不会自动清理该目录下的文件,因此CRAN要求包在安装完成后必须清理这里的临时文件。
内容的提问来源于stack exchange,提问作者AP30
相关产品推荐
相关产品推荐

