如何在R语言中展开用户和环境变量?

如何在R语言中展开用户和环境变量?,r,path,environment-variables,R,Path,Environment Variables,有什么方法可以在R中扩展tilde和环境变量吗 例如,在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是

有什么方法可以在R中扩展tilde和环境变量吗

例如,在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\u 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"
有关更多信息和选项,请参阅。

基本相同

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\u 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)
需要(胶水)
interp_from_env=函数(路径){
e%
映射(~eval(解析(text=),envir=e))
glue::glue(路径,.envir=e,.open=“${”)
}
#用法示例
read.delim(interp_from_env(${PRJ_DATA}/foo.txt)))
来源(interp_from_env(${HOME}/bar.R”))

一个更通用的解决方案是将所有环境变量展开到专用的R环境中,并使用

require(purrr)
需要(胶水)
interp_from_env=函数(路径){
e%
映射(~eval(解析(text=),envir=e))
glue::glue(路径,.envir=e,.open=“${”)
}
#用法示例
read.delim(interp_from_env(${PRJ_DATA}/foo.txt)))
来源(interp_from_env(${HOME}/bar.R”))

谢谢。您知道解决第二个问题的方法吗(展开环境变量)?我认为该列表包含在OS或R系统中预定义的变量-我的意思是,我想获得用户定义的环境变量,这些变量通常是在
~/.bash_profile
~/.bashrc
等中编写的。@user2360798将它们添加到
~/.Renviron
文件中。有关详细信息,请参阅编辑。谢谢。您是否知道解决第二个问题的方法(扩展环境变量)?我认为该列表包含在OS或R系统中预定义的变量-我的意思是,我想获得用户定义的环境变量,这些变量通常用
~/.bash_profile
~/.bashrc
等格式编写。user2360798将它们添加到
~/.Renviron
文件中。有关详细信息,请参阅编辑。这不是一般性的because它是特定于操作系统的。事实上@HongOoi,
system(“export”)
并不是真正的操作系统不可知论。我已经调整了解决方案,使用不带参数的
Sys.getenv
来填充插值环境。这是不太通用的,因为它是特定于操作系统的。事实上@HongOoi,
system(“export”)
并不是真正的操作系统不可知论。我已经调整了解决方案,使用不带参数的Sys.getenv来填充插值环境。