es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Función seurat en R con nombre de cada experimento/variable.

Estoy utilizando Seurat para analizar algunos datos de scRNAseq. He logrado poner todos los códigos de integración SCT de una línea de SatijaLab en una función con básicamente:

SCT_normalization <- function(f1, f2) { 
      f_merge <- merge(f1, y=f2) 
      f.list <- SplitObject(f_merge, split.by = "stim")
      f.list <- lapply(X = f.list, FUN = SCTransform)
      features <- SelectIntegrationFeatures(object.list = f.list, nfeatures = 3000)
      f.list <- PrepSCTIntegration(object.list = f.list, anchor.features = features)
      return(f.list)
}

De esta manera, tendré f.list en el entorno global para el análisis posterior y la generación de gráficos. El problema al que me enfrento es que cada vez que ejecuto la función, la salida es f.list. Quiero que sea específica para el nombre del valor de entrada (es decir, f1 y/o f2). Básicamente, algo que pueda configurar para saber qué valor de entrada se utilizó para generar la salida final. Vi algo que utiliza la función assign, pero alguien escribió una advertencia sobre “lo malvado y equivocado…”, así que no estoy seguro de cómo abordar esto.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una forma de abordar este problema es utilizar la declaración return con una lista con nombre, donde los nombres de la lista corresponden a los valores de entrada utilizados para generar la salida. Aquí hay una modificación de ejemplo de la función:

    “`{r}
    SCT_normalization <- function (f1, f2) {
    f_merge <- merge (f1, y=f2)
    f.list <- SplitObject(f_merge, split.by = “stim”)
    f.list <- lapply(X = f.list, FUN = SCTransform)
    features <- SelectIntegrationFeatures(object.list = f.list, nfeatures = 3000)
    f.list <- PrepSCTIntegration(object.list = f.list, anchor.features = features)
    result_list <- list(paste0(“f1_f2_”, format(Sys.time(), “%Y%m%d_%H%M%S”)) = f.list)
    return (result_list)
    }


    En esta función modificada, la salida es una lista con nombre con un nombre único. El nombre indica los valores de entrada utilizados para generar la salida y la fecha y hora actuales. De esta manera, cada vez que se ejecuta la función con diferentes valores de entrada, se genera una lista con nombre separada en el entorno global. Para utilizar la salida de la función, se debe acceder a la lista con nombre correspondientemente. Por ejemplo: ```{r} # Ejecutar la función con dos entradas: f1 <- Read10X(data.dir = "ruta/a/f1") f2 <- Read10X(data.dir = "ruta/a/f2") resultado <- SCT_normalization(f1, f2) # Acceder a la lista con nombre basada en los valores de entrada: resultado$f1_f2_20211118_110200

    Este enfoque permite identificar fácilmente los valores de entrada utilizados para generar la salida, sin utilizar la función assign(), que puede tener consecuencias no deseadas.

Comments are closed.