¿Cómo puedo obtener los formales (argumentos) de un objeto de llamada? formals() solo parece funcionar con funciones.R - Obtener formales del objeto de llamada
5
A
Respuesta
5
no Bueno, una llamada hace tener formales, únicos argumentos reales ... La diferencia es que una función como foo <- function(x, y, ..., z=42)
puede ser llamado con argumentos reales como foo(42, bar=13)
.
... Pero conseguir los argumentos se puede hacer así:
a <- call('foo', a=42, 13)
as.list(a)[-1]
#$a
#[1] 42
#
#[[2]]
#[1] 13
... por el contrario, generalmente se puede (no siempre) encontrar la función real y encontrar los formales para ello:
a <- quote(which(letters=='g'))
formals(match.fun(a[[1]]))
#$x
#
#$arr.ind
#[1] FALSE
#
#$useNames
#[1] TRUE
Aquí había necesidad de añadir un poco de manejo de errores si la función no se puede encontrar (al igual que con la llamada a foo
arriba) ...
Cuestiones relacionadas
- 1. Obtener métodos Objeto R
- 2. Identidad del objeto R
- 3. ¿Cómo maneja R el objeto en la llamada de función?
- 4. Obtener objeto padre dentro de devoluciones de llamada jQuery
- 5. JavaScript Método literal del objeto: llamada recursiva
- 6. HTML5 API del archivo: obtener el objeto de devolución de llamada de archivos dentro de FileReader
- 7. Identificación de objeto R
- 8. Obtener un InputStream/io.Reader del objeto OMElement
- 9. Obtener url de solicitud del objeto xhr
- 10. Obtener una matriz de claves del objeto
- 11. Programación de enseñanza y métodos formales
- 12. en R, extrae parte del objeto de la lista
- 13. R: salida de error estándar del objeto lm
- 14. R página de ayuda como objeto
- 15. Sincronización de los parámetros formales en java
- 16. ¿Función de llamada desde cadena dentro del objeto?
- 17. C# Obtener progID del objeto COM
- 18. Cómo obtener el valor booleano del objeto
- 19. Obtener propiedades y valores del objeto desconocido
- 20. Fluido NHibernate obtener ID del objeto guardado
- 21. Obtener el nombre del objeto o clase
- 22. Cómo obtener valores fuera del objeto HtmlAttributes
- 23. Obtener la propiedad del objeto en JavaScript
- 24. Obtener valores de frecuencia del histograma en R
- 25. ¿Cómo obtener el nombre del método de llamada?
- 26. ¿Cómo obtener el nombre del método de llamada?
- 27. Funciones de llamada desde la función dentro de un objeto (literal del objeto)
- 28. R - obtener todas las variables creadas desde la llamada de función
- 29. ¿Cómo obtener el nombre del día del objeto java sql.Timestamp?
- 30. ¿Cómo obtener la ruta del script en R?
usted no tiene que obligar a la llamada a una lista - puedes simplemente w ork con ella como una lista, siempre y cuando recuerde que el primer elemento es la función. También es probable que desee 'match.call' en lugar de' match.fun' - de esa manera puede combinar los argumentos predeterminados y suministrados. – hadley
Bueno, no querría 'match.call' en lugar de' match.fun', pero es una adición útil: 'match.call (eval (a [[1]]), a)' – hadley
@hadley - Gracias por mencionar 'match.call'. No forzar a una lista puede funcionar si sabes exactamente lo que estás haciendo, pero 'a [-1]' se imprimirá de manera muy extraña, y no se puede pasar como args a 'do.call' por ejemplo ... – Tommy