Domanda

Ho questo feature_list che contiene diversi valori possibili, dire "A", "B", "C", ecc e non v'è il tempo in time_list.

Così avrò un ciclo in cui vorrò passare attraverso ciascuno di questi valori diversi e metterlo in una formula.

qualcosa come for(i in ...) e poi my_feature <- feature_list[i] e my_time <- time_list[i].

Poi ho messo il tempo e la caratteristica scelto per un dataframe da utilizzare per la regressione

feature_list<- c("GPRS")
time_list<-c("time")
calc<-0

feature_dim <- length(feature_list)
time_dim <- length(time_list)

data <- read.csv("data.csv", header = TRUE, sep = ";")
result <- matrix(nrow=0, ncol=5)
errors<-matrix(nrow=0, ncol=3)

for(i in 1:feature_dim) {
    my_feature <- feature_list[i]
    my_time <- time_list[i]

    fitdata <- data.frame(data[my_feature], data[my_time])

    for(j in 1:60) {

        my_b <- 0.0001 * (2^j)

        for(k in 1:60) {
            my_c <- 0.0001 * (2^k)
            cat("Feature: ", my_feature, "\t")
            cat("b: ", my_b, "\t")
            cat("c: ", my_c, "\n")

            err <- try(nlsfit <- nls(GPRS ~ 53E5*exp(-1*b*exp(-1*c*time)), data=fitdata, start=list(b=my_b, c=my_c)), silent=TRUE)
            calc<-calc+1

            if(class(err) == "try-error") {
                next
            }

            else {
                coefs<-coef(nlsfit)
                ess<-deviance(nlsfit)
                result<-rbind(result, c(coefs[1], coefs[2], ess, my_b, my_c))
            }
    }
} 
}

Ora nella chiamata nls() voglio essere in grado di chiamare my_feature invece di "A" o "B" o qualcosa e poi a quello successivo sulla lista. Ma ottengo un errore lì. Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

È possibile utilizzare incollare per creare una versione stringa della formula tra cui il nome della variabile che si desidera, poi usare le funzioni as.formula o formula per convertire questo a una formula per passare a nls.

as.formula(paste(my_feature, "~ 53E5*exp(-1*b*exp(-1*c*time))"))

Un'altra opzione è quella di utilizzare la funzione bquote per inserire i nomi delle variabili in una chiamata di funzione, quindi la chiamata di funzione eval.

Altri suggerimenti

ho lavorato con R qualche tempo fa, forse si può dare una prova:

Quello che vogliamo è creare una formula con un elenco di variabili giusto?

quindi se la variabile di risposta è il primo elemento della vostra lista e gli altri sono le variabili esplicative si potrebbe creare la formula in questo modo:

my_feature [0] ~ ridurre ( "+", my_feature [1:]). Questo lavoro potrebbe.

In questo modo è possibile creare formule che dipende dalle variabili in my_features.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top