Home Forum Statistica con R Scrivere un ciclo per una funzione

This topic contains 2 replies and has 2 voices.

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #4566

    albertozq92
    Participant

    Salve a tutti, sono nuovo qui e vorrei chiedervi una mano.
    Ho creato una funzione chiamata “urna di polya”, l’ho ripetuta cinque volte e ne ho ottenuto una matrice al modo seguente:


    numerosità <- 10000
    parametro_precisione <- 30^2

    urnadipolya <- function(alpha, numerosità, parametro_precisione) {
    elementi = c(0)

    for (i in 1:numerosità) {
    if (rnorm(1, 0, 100) < parametro_precisione / (parametro_precisione + length(elementi))) {

    nuovo_tipo = alpha()
    elementi = c(elementi, nuovo_tipo)
    } else {

    elemento = elementi[sample(1:length(elementi), 1)]
    elementi = c(elementi, elemento)
    }
    }

    elementi
    }`

    theta1 = urnadipolya(function() rnorm(1, 0, 100), numerosità, parametro_precisione)
    theta2 = urnadipolya(function() rnorm(1, 0, 100), numerosità, parametro_precisione)
    theta3 = urnadipolya(function() rnorm(1, 0, 100), numerosità, parametro_precisione)
    theta4 = urnadipolya(function() rnorm(1, 0, 100), numerosità, parametro_precisione)
    theta5 = urnadipolya(function() rnorm(1, 0, 100), numerosità, parametro_precisione)

    theta=rbind(theta1, theta2, theta3, theta4, theta5)

    Ora la mia domanda é la seguente: vorrei ripetere questo procedimento 30 volte ed ottenere una matrice 30X100, come posso strutturare un ciclo per evitare l’orribile copia-incolla?

    Grazie per l’attenzione.

    #4567
    MADARA
    MADARA
    Participant

    Semplicemente con *replicate:

    
    d <- t(replicate(30, urnadipolya(function() rnorm(1, 0, 100), 
                                     numerosita, parametro_precisione), simplify = TRUE))
    

    ho usato transpose solo perché tu mi hai specificato 30 X 100=numerosità;
    poi se i dati cominciano ad essere grandi, potresti anche parallelizzare facilmente con *foreach

    #4568

    albertozq92
    Participant

    Effettivamente così é davvero molto semplice, non conoscevo proprio “replicate”.
    Ti sono molto grato per il tuo aiuto e la velocissima risposta, grazie mille.

Viewing 3 posts - 1 through 3 (of 3 total)

You must be logged in to reply to this topic.