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.

Utilice “Aplicar” y “Replicar” en una función para una matriz.

Tengo una matriz numérica de N x N que he convertido en un marco de datos en R, y necesito aplicar rnorm a cada celda. Sin embargo, quiero usar apply y replicate para llevar a cabo este cálculo. Mi código actual para el cálculo en la primera celda (que tiene encabezados) es:


firstCell <- data.frame( rnorm(1000, mean = matrixName[2,1], sd = 0.8*matrixName[2,1]) )

Intenté usar apply primero con:


matrixApply <- apply( matrixName, c(1,2), function(x) rnorm( 1000, mean = x, sd = 0.8*x ) )

Ahora, quiero usar replicate para replicar este mismo cálculo 1000 veces, lo que resulta en 1000 instancias de esta matriz N x N. Sin embargo, cuando uso el siguiente código, solo obtengo la misma matriz repetida 1000 veces.


useReplicate <- replicate(n=1000, matrixApply, simplify=F)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para realizar el cálculo de aplicar rnorm a cada celda en el dataframe utilizando apply y replicate, puedes usar el siguiente código:

    # Convertir la matriz en un dataframe
    df <- data.frame(nombreMatriz)
    
    # Aplicar rnorm a cada celda en el dataframe utilizando apply
    df_escalado <- apply(df, c(1,2), function(x) rnorm(1000, mean = x, sd = 0.8*x))
    
    # Replicar 1000 veces utilizando replicate
    lista_matrices <- replicate(n = 1000, df_escalado, simplify = FALSE)
    
    # Ver la primera instancia de la lista de matrices resultante
    lista_matrices[[1]]
    

    Explicación:

    • Primero, la matriz nombreMatriz se convierte en un dataframe df.
    • Luego, se utiliza apply con una función anónima que aplica rnorm a cada celda en el dataframe.
    • Esto resulta en un array tridimensional con dimensiones N x N x 1000, donde N x N son las dimensiones del dataframe original y 1000 es el número de replicaciones.
    • Finalmente, se utiliza replicate para replicar el cálculo 1000 veces, obteniendo una lista de 1000 matrices.

    Ten en cuenta que en el código de ejemplo que proporcionaste, rnorm se aplicó solo a la primera celda. El código mostrado aquí aplica rnorm a cada celda en el dataframe, lo que puede producir una salida diferente en comparación con el código original.

Comments are closed.