在会话中更改tempdir()(更新R_TempDir)

Jer*_*oen 4 c r cran

我正在寻找一种方法来tempdir()在R会话开始后更改位置.我认为需要更新C级全局变量R_TempDir.在R内做这件事的好方法是什么?

Jer*_*oen 6

更新: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)