Ámbitos y sintaxis de archivos

Selección de ruta

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.

Interpretación nativa

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.

Guardado y límites

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 
##     "*****"     "*****"     "*****"     "*****"