簡體   English   中英

如何用R語言顯示用戶和環境變量?

[英]How to unfold user and environment variable in R language?

有什么方法可以在R中擴展代字號和環境變量嗎?

例如,在Python中,您可以通過編寫以下代碼集來獲得它:

import os
os.path.expanduser("~/r_workspace") # return "/Users/yourname/r_workspace" (in OS X)
os.path.expandvars("$R") # return "/Users/yourname/r_workspace", if you set "$R" to it in advance

R是否提供某種功能? 我不想打擾寫下面的代碼:

read.csv("/Users/myname/python_workspace/subdirectory_1/subdirectory_2/data.csv")

基本上一樣!

path.expand("~")
#[1] "/Users/Simon"

path.expand將用用戶的主目錄(如果在該平台上定義)替換前導波浪號來擴展路徑名。

然后使用Sys.getenv()來獲取系統上定義的環境變量的值,例如

#  Path to R home directory
Sys.getenv( "R_HOME" )
#[1] "/Library/Frameworks/R.framework/Resources"

# Path to default R library
Sys.getenv("R_LIBS")
#[1] "~/R64Libs"

要查看可用的環境變量...

head( names(Sys.getenv()) )
#[1] "__CF_USER_TEXT_ENCODING"    "Apple_PubSub_Socket_Render" "Apple_Ubiquity_Message"    
#[4] "COMMAND_MODE"               "DISPLAY"                    "EDITOR"    

定義新的環境變量

要設置環境變量使其始終可用於R,您需要在名為.Renviron的文件中設置該變量,該文件默認位於{$HOME}目錄中。 例如,為了使環境變量R_WORKSPACE可用,我添加了以下行

R_WORKSPACE = ~/Documents/R/StackOverflow

/Users/Simon/.Renivron 然后,當我加載R時,您會看到路徑擴展是自動完成的...

#  Clean workspace - commented out so you don't wipe your session!
#  rm( list = ls() )

#  See that variable is now available in R
Sys.getenv( "R_WORKSPACE" )
[1] "~/Documents/R/StackOverflow"

有關更多信息和選項,請參見此處答案

更通用的解決方案是將所有環境變量展開到專用的R環境中,並使用膠水將感興趣的字符串插入其中。

require(purrr)
require(glue)


interp_from_env = function(path){
    e <- new.env()
    env = Sys.getenv()

    paste0(make.names(names(env)), "='", gsub("'", '', env), "'") %>%
        map(~eval(parse(text=.), envir=e))

    glue::glue(path, .envir=e, .open="${")
}

#usage examples
read.delim(interp_from_env("${PRJ_DATA}/foo.txt") )
source(interp_from_env("${HOME}/bar.R"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM