Aquí está mi código R. Las funciones se definen como:promesa que ya se está evaluando: ¿argumento recurrente recursivo de referencia o problemas anteriores?
f <- function(x, T) {
10 * sin(0.3 * x) * sin(1.3 * x^2) + 0.001 * x^3 + 0.2 * x + 80
}
g <- function(x, T, f=f) {
exp(-f(x)/T)
}
test <- function(g=g, T=1) {
g(1, T)
}
El error de correr es:
> test()
error en la prueba():
promesa ya se encuentra bajo evaluación: recursiva referencia argumento por defecto o problemas anteriores ?
Si sustituyo la definición de f
en g
, el error desaparece.
Me preguntaba cuál fue el error? ¿Cómo corregirlo si no sustituye la definición de f
por la de g
? ¡Gracias!
Actualización:
Gracias! Dos preguntas:
(1) si la función test
además toma un argumento para f
, ¿agregará algo como test <- function(g.=g, T=1, f..=f){ g.(1,T, f.=f..) }
? En casos con más recursiones, es una práctica buena y segura agregar más .?
(2) si f
es un argumento que no es función, por ejemplo g <- function(x, T, f=f){ exp(-f*x/T) }
y test <- function(g.=g, T=1, f=f){ g.(1,T, f=f.) }
, se utiliza el mismo nombre para ambos argumentos no funcionales formales y reales una práctica buena y segura o puede causar algunos problemas potenciales?
¡Gracias! Dos preguntas (1) si función * prueba * además toma un argumento para * f *, ¿agregará algo como * prueba <- función (g. = G, T = 1, f ... = f) {g. (1 , T, f. = F ..)} *? En los casos con más recursiones, ¿es una buena y segura práctica agregar más *. *? (2) si * f * es un argumento sin función, por ejemplo * g <- función (x, T, f = f) {exp (-f * x/T)} * y * prueba <- función (g . = g, T = 1, f = f) {g. (1, T, f = f.)} *, usará el mismo nombre para los argumentos no funcionales tanto formales como reales una práctica buena y segura o puede causar algunos problemas potenciales? – Tim
¿Alguna otra solución? Estoy pasando algunos argumentos en el fondo de la cadena de funciones (alrededor de 5 niveles), y esta solución puede convertirse en '..... engorroso'. :) –
¿Qué pasa si no puedo cambiar el nombre de un argumento, por ejemplo, cuando la función en cuestión es una función del sistema como 'get'? – sds