R 세션이 시작된 후 tempdir()
위치를 변경하는 방법을 찾고 있습니다. C 레벨의 전역 변수 R_TempDir
을 업데이트해야한다고 생각합니다. R에서 이것을 수행하는 좋은 방법은 무엇입니까?세션에서 tempdir()을 변경하십시오 (R_TempDir 업데이트)
답변
업데이트 : 사이먼 Urbanecks unixtools package이 작업을 수행 할 수있는 기능이 있습니다. 코드 밑 (나중에 참조 할 수 있도록).
set.tempdir <- function(path) {
invisible(.Call(C_setTempDir, path.expand(path)))
}
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;
}
tempdir()
함수는 임시 디렉토리를 만드는 가장 좋은 방법이므로 마지막 세션에서 유효한 파일을 저장할 수 있습니다. 세션이 시작될 때 생성 된 임시 디렉토리를 반환하며 기본적으로 tempfile()
에 의해 생성 된 새 임시 파일이 저장됩니다.
그러나 작업 디렉토리와 관련이 없습니다. 작업 디렉토리를 변경하려면 setwd()
명령을 사용해야합니다.
임시 파일이 저장되는 디렉토리를 변경하려면 명령의 매개 변수로 설정해야합니다.
tempfile(tmpdir="/my/path/to/tmpfile")
나는 이것을 알고있다. 필자는 명시 적으로 tempdir() 및 tempfile()의 기본 동작을 변경하려고합니다. – Jeroen
이것과 관련된 것이 있습니까? http://tolstoy.newcastle.edu.au/R/e2/devel/06/09/0025.html 일부 시스템 환경 변수를 무시할 수는 있지만'tempdir()'리턴을 수정하지 않는 것 같습니다. –
그것은 지독 치즈,하지만 당신은 당신이 (암시 적 또는 명시 적으로) 즉,에 보였다 코드를 사용하지 않은 그런 다음 당신이만큼 OK 것
tempdir <- function() { "[desired temp dir here]" }
을 말함으로써 base::tempdir
마스크 수 기본 환경의 네임 스페이스 ...
초기화 시간에 설정되고 이후에 변경되지 않으므로이 작업을 수행하는 다른 방법은 실제로 표시되지 않습니다. 즉, Sys.setenv(TMPDIR="/home/bolker/R")
이 작동하지 않습니다. 너무 늦었습니다 (아시다시피).
tempdir()
덜 하드 코딩 된 경우 ... 여기서는 디자인 기준을 이해하지 못합니다. (또는 덜 신중하게 설계 기준이 신중하게 고려되었는지 여부는 ...). (비슷한 코드 인 .libPaths()
의 하드 코딩/디자인에 대해서도 심술 궂은 느낌이 들었습니다. 실행중인 R 세션에있는 경우 변경하는 방법은 없습니다.)
tempdir()
의 잠금을 해제하고 baseenv()
새로운 기능은 작동 될 수 있습니다
tempdir <- function() "/NewTempDir"
unlockBinding("tempdir", baseenv())
assignInNamespace("tempdir", tempdir, ns="base", envir=baseenv())
assign("tempdir", tempdir, baseenv())
lockBinding("tempdir", baseenv())
2016 년은 여전히 내 취향과 사용 사례에 대한 좋은 대답을 보지 못했어요. 나는 같은 문제에 직면하고 다음과 같은 솔루션이보기의 사용자 관점에서 가장 깨끗한입니다 발견
mkdir rtmp; TMPDIR=$PWD/rtmp Rscript test.R; rm -rf rtmp
또는 실행시 :
# test.R content
message(tempdir())
지금 스크립트 실행시 루트 TEMPDIR 변경 표현 :
mkdir rtmp; TMPDIR=$PWD/rtmp R -e 'tempdir()'; rm -rf rtmp
임시 파일을위한 공간을 많이 사용하는 스크립트/패키지를 작성하는 프로그래머가 워싱턴 TMPDIR 처리해야한다는 언급도 가치가있다 y @ João Daniel이 언급했다.
2017 년, 완벽하게 작동하므로 다른 패키지를 설치하지 않으므로이 솔루션을 사용하고 thantks를 작동합니다. – HanniBaL90
그건 완전히 맞아! 'install.packages ('unixtools', repos = 'http://www.rforge.net/'); unixtools :: set.tempdir ("/ new/tmp/path")'트릭을했습니다. – fdetsch