renviron_path() consulta scope en el orden
proporcionado y devuelve el primer archivo existente. No fusiona
archivos. Si no existe ninguno, devuelve la primera ruta candidata para
permitir su creación. El orden predeterminado es
c("user", "project"); para priorizar el proyecto use
c("project", "user").
project=getwd() usa el directorio de trabajo actual, sin
detectar raíces ni activar proyectos de usethis. Puede pasar
project y user explícitamente. Una
.file absoluta siempre selecciona ese archivo. Para el
nombre predeterminado .Renviron en el ámbito de usuario,
R_ENVIRON_USER tiene prioridad salvo que se proporcione
user. Los nombres personalizados nunca se redirigen por esa
variable. scoped_path_r() se conserva para construir rutas
de un único ámbito.
La lectura usa readRenviron() en otro proceso de R,
iniciado con --vanilla. No ejecuta perfiles de inicio ni
modifica el entorno del proceso principal. Hereda el entorno actual para
resolver referencias y procesa las asignaciones en orden. Las
referencias pueden utilizar claves que no estén en .vars:
el filtro se aplica al resultado.
Se admiten valores con =, comillas simples o dobles,
barras, Unicode UTF-8, comentarios de línea y referencias
${VAR}, ${VAR-default} y
${VAR:-default}. También se acepta
export KEY=value como extensión; R por sí solo no necesita
ese prefijo. Una línea KEY= sin valor se ignora, mientras
KEY='' declara una cadena vacía. Un # al final
de una asignación forma parte del valor. Las claves repetidas siguen la
última asignación efectiva de R.
En Windows una cadena vacía puede representarse como variable ausente
en el entorno del proceso. La lista devuelta conserva la clave y
"". Una expansión sin comillas que produzca vacío puede ser
ignorada por R y mantener un valor heredado; use comillas para expresar
intención. Los valores devueltos no son una copia textual de expresiones
del archivo.
Consulte la documentación de inicio de R para las reglas del lector nativo. El paquete no ejecuta comandos de shell ni interpreta scripts.
Los valores suministrados a renviron_save() y
renviron_add() son literales:
${VARIABLE} se guarda para recuperar ese mismo texto. Las
ediciones de una clave mantienen las expresiones ajenas sin resolverlas
ni volverlas literales. Si pasa una lista a un editor con
in_place=TRUE, esa lista modificada reemplaza todo el
documento.
Se requieren nombres portables [A-Za-z_][A-Za-z0-9_]* y
valores escalares de caracteres sin NA ni saltos de línea. Se rechazan
bytes NUL, UTF-8 inválido y líneas codificadas de más de 99900 bytes.
Los archivos ausentes o vacíos devuelven list(); una
asignación inválida detiene toda la operación con el número de línea,
sin incluir su valor.
El guardado prepara un temporal en el mismo directorio y reemplaza el destino; comprueba cambios desde la lectura y conserva permisos de archivos existentes. No proporciona bloqueo entre escritores concurrentes: coordine un solo escritor por archivo. No escribe a través de enlaces simbólicos. El directorio debe existir; los nuevos archivos usan modo 0600 donde se soporta y las ACL heredadas siguen aplicándose en Windows. Las ediciones normalizan finales de línea a LF y UTF-8.
Cada lectura inicia un proceso de R: para consultar muchas claves, lea una vez y reutilice la lista. La llamada necesita una instalación de R ejecutable y tiene un límite de 60 segundos.
local({
path <- tempfile()
on.exit(unlink(path))
values <- list(RNV_EQUALS = "a=b==", RNV_LITERAL = "${RNV_EXAMPLE}",
RNV_PATH = "C:\\folder\\", RNV_EMPTY = "")
renviron::renviron_save(values, .file = path, confirm = FALSE)
stopifnot(identical(renviron::renviron_read(.file = path), values))
print(renviron::renviron_list(values))
})## RNV_EQUALS RNV_LITERAL RNV_PATH RNV_EMPTY
## "*****" "*****" "*****" "*****"