GOOGLE ADS

domingo, 1 de mayo de 2022

Cómo pasar variables desconocidas a otra función en R

Estoy escribiendo una función que genera un mapa de calor utilizando algunos datos de entrada, pero realiza algunas transformaciones de antemano. Para generar el mapa de calor real, estoy usando ComplexHeatmap::Heatmap, que ofrece una gran variedad de opciones para modificar el mapa de calor. Me gustaría darle al usuario la oportunidad de especificar directamente los argumentos a ComplexHeatmap::Heatmaptravés de mis funciones.

En este momento estoy usando algo que se parece a esto:

library(ComplexHeatmap)
mat = matrix(rnorm(100), 10)
rownames(mat) = paste0("R", 1:10)
colnames(mat) = paste0("C", 1:10)
test_fun <- function(mat,...){
args = list(...)
print(args)
p <- ComplexHeatmap::Heatmap(mat,
show_row_names = args$show_row_names)
return(p)
}
test_fun(mat, show_row_names=F)

Esto funciona bien, pero digamos que si el usuario quiere cambiar el show_column_namesargumento de ComplexHeatmap::Heatmap. Esto daría como resultado un error porque no lo definí explícitamente args$show_column_names. Parece muy tedioso hacer esto manualmente para cada argumento que ComplexHeatmap::Heatmapofrece y me preguntaba si hay una forma más elegante de hacerlo. Idealmente, y lo que finalmente me gustaría es que ComplexHeatmap::Heatmapusaría sus argumentos predeterminados, pero el usuario puede "sobrescribirlos" si los especifica en la test_funfunción.

Pensé que algo como esto podría funcionar, pero desafortunadamente no es así.


test_fun <- function(mat,...){
args = list(...)
print(args)
p <- ComplexHeatmap::Heatmap(mat,...)
return(p)
}
test_fun(mat, show_row_names=F, show_column_names=F)

¡Cualquier ayuda es muy apreciada!


Solución del problema

No estoy particularmente familiarizado con el paquete, pero solo desea:

test_fun <- function(mat,...){
ComplexHeatmap::Heatmap(mat,...)
}

Parece que sí, por ejemplo, podríamos deshacernos de los nombres de las columnas y los nombres de las filas llamando a test_fun así:

test_fun(mat, show_row_names=FALSE, show_column_names = FALSE)

Los puntos suspensivos o... nos permiten colocar un número arbitrario de 'argumentos reconocidos por la función ComplexHeatmap::Heatmap' en nuestra función test_fun.

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...