我正在寻找一种方法来tempdir()在R会话开始后更改位置.我认为需要更新C级全局变量R_TempDir.在R内做这件事的好方法是什么?
更新:Simon Urbanecks的unixtools软件包具有完成此功能的功能。代码下方(以供将来参考)。
set.tempdir <- function(path) {
invisible(.Call(C_setTempDir, path.expand(path)))
}
Run Code Online (Sandbox Code Playgroud)
C代码:
#include <string.h>
#include <Rinternals.h>
#include <Rembedded.h>
SEXP C_setTempDir(SEXP sName) {
if (TYPEOF(sName) != STRSXP || LENGTH(sName) != 1)
Rf_error("invalid path");
R_TempDir = strdup(CHAR(STRING_ELT(sName, 0)));
return sName;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您解锁tempdir()并重新分配新功能,baseenv()它可能会起作用:
tempdir <- function() "/NewTempDir"
unlockBinding("tempdir", baseenv())
assignInNamespace("tempdir", tempdir, ns="base", envir=baseenv())
assign("tempdir", tempdir, baseenv())
lockBinding("tempdir", baseenv())
Run Code Online (Sandbox Code Playgroud)