variable how data r statistics const constants

how - table() r



Declarando una variable de Const en R (6)

Estoy trabajando en R y me gustaría definir algunas variables que yo (o uno de mis colaboradores) no puedo cambiar. En C ++, haría esto:

const std::string path( "/projects/current" );

¿Cómo hago esto en el lenguaje de programación R?

Edite para mayor claridad: sé que puedo definir cadenas como esta en R:

path = "/projects/current"

Lo que realmente quiero es una construcción de lenguaje que garantice que nadie pueda cambiar el valor asociado con la variable llamada "ruta".

Editar para responder a los comentarios:

Es técnicamente cierto que const es una garantía en tiempo de compilación, pero sería válido en mi mente que el intérprete de R arrojara la ejecución de detención con un mensaje de error. Por ejemplo, observe lo que sucede cuando intenta asignar valores a una constante numérica:

> 7 = 3 Error in 7 = 3 : invalid (do_set) left-hand side to assignment

Entonces, lo que realmente quiero es una función de idioma que le permita asignar valores una y solo una vez, y debería haber algún tipo de error cuando intente asignar un nuevo valor a una variable declarada como const. No me importa si el error ocurre en tiempo de ejecución, especialmente si no hay una fase de compilación. Esto podría no ser técnicamente complicado por la definición de Wikipedia, pero está muy cerca. También parece que esto no es posible en el lenguaje de programación R.


(Editado para nueva idea :) Las funciones bindenv proporcionan un

interfaz experimental para ajustes en entornos y enlaces dentro de entornos. Permiten entornos de bloqueo, así como enlaces individuales, y para vincular una variable a una función.

Esto parece ser el tipo de cosa que podría dar una falsa sensación de seguridad (como un puntero const a una variable no const ) pero podría ayudar.

(Editado para focus :) const es una garantía de tiempo de compilación , no un bloqueo de bits en la memoria. Como R no tiene una fase de compilación en la que se ve todo el código a la vez (está diseñado para uso interactivo), no hay forma de verificar que las instrucciones futuras no infrinjan ninguna garantía. Si hay una forma correcta de hacerlo, la gente de la lista de ayuda de R sabrá. Mi solución sugerida: falsifique su propia compilación. Escriba un script para preprocesar su código R que sustituirá manualmente el literal correspondiente para cada aspecto de sus variables "constantes".

(Original :) ¿Qué beneficio espera obtener al tener una variable que actúa como una "const" de C?

Como R tiene exclusivamente semántica llamada por valor (a menos que haga algo de munging con entornos), no hay ninguna razón para preocuparse por atacar sus variables llamando funciones sobre ellas. Adoptar algún tipo de convención de nomenclatura o utilizar alguna estructura de OOP es probablemente la solución adecuada si está preocupado por usted y sus colaboradores que usan accidentalmente variables con los mismos nombres.

La característica que está buscando puede existir, pero lo dudo dado el origen de R como un entorno interactivo en el que le gustaría poder deshacer sus acciones.


Estoy bastante seguro de que esto no es posible en R. Si te preocupa volver a escribir accidentalmente el valor, entonces lo más fácil sería poner todas tus constantes en una estructura de lista, entonces sabrás cuándo " re usando esos valores Algo como:

my.consts<-list(pi=3.14159,e=2.718,c=3e8)

Luego, cuando necesita acceder a ellos, tiene una memoria de asistentes para saber qué no hacer y también los saca de su espacio de nombres normal.

Otro lugar para preguntar sería la lista de correo de desarrollo R. Espero que esto ayude.


R no tiene una función de constante de idioma. La idea de la lista anterior es buena; Yo personalmente uso una convención de nombres como ALL_CAPS.


Tomé la respuesta a continuación desde este sitio web

El tipo más simple de expresión R es solo un valor constante, generalmente un valor numérico (un número) o un valor de carácter (una pieza de texto). Por ejemplo, si necesitamos especificar una cantidad de segundos correspondiente a 10 minutos, especificamos un número.

> 600 [1] 600

Si necesitamos especificar el nombre de un archivo del que queremos leer datos, especificamos el nombre como un valor de carácter. Los valores de los caracteres deben estar rodeados por comillas dobles o comillas simples.

> "http://www.census.gov/ipc/www/popclockworld.html" [1] "http://www.census.gov/ipc/www/popclockworld.html"


Ver lockBinding :

a <- 1 lockBinding("a", globalenv()) a <- 2 Error: cannot change value of locked binding for ''a''


Ya que planea distribuir su código a otros, podría (¿debería?) Considerar crear un paquete. Crea dentro de ese paquete un NAMESPACE. Allí puede definir variables que tendrán un valor constante. Al menos para las funciones que usa su paquete. Eche un vistazo a Tierney (2003) Name Space Management for R