2017-02-23 3 views
-2

Die Variablen aus der Funktion werden nicht in den globalen Variablen in R-Programmierung gespeichert. Schauen Sie sich den Code-Schnipsel:Variablen innerhalb der Funktion werden nicht in der globalen Umgebung in R-Programmierung gespeichert

install.packages('HMM') 
library('HMM') 

hmm_source <- function(){ 

    lamba_1 <- initHMM(c("s1","s2"), c("a","b","c"), c(1,0), matrix(c(.1,.6,.9,.4),nrow = 2,ncol = 2),matrix(c(.1,.4,.3,.2,.6,.4),nrow = 2,ncol = 3)) 

    lamba_2 <- initHMM(c("s1","s2"), c("a","b","c"), c(1,0), matrix(c(.4,.8,.6,.2),nrow = 2,ncol = 2),matrix(c(.5,.2,.4,.1,.1,.7),nrow = 2,ncol = 3)) 

    return(list(m1=lamba_1,m2=lamba_2)) 
} 
source1_2 <- hmm_source()install.packages('HMM') 
library('HMM') 

hmm_source <- function(){ 

    lamba_1 <- initHMM(c("s1","s2"), c("a","b","c"), c(1,0), matrix(c(.1,.6,.9,.4),nrow = 2,ncol = 2),matrix(c(.1,.4,.3,.2,.6,.4),nrow = 2,ncol = 3)) 

    lamba_2 <- initHMM(c("s1","s2"), c("a","b","c"), c(1,0), matrix(c(.4,.8,.6,.2),nrow = 2,ncol = 2),matrix(c(.5,.2,.4,.1,.1,.7),nrow = 2,ncol = 3)) 

    return(list(m1=lamba_1,m2=lamba_2)) 
} 
source1_2 <- hmm_source() 

hier meine Funktion gibt die zwei HMM-Modelle, aber die Variablen lamba_1 und lamba_2 sind nicht in der globalen Umwelt in R. errettet ich in RStudio arbeite, obwohl ich den Code versucht, läuft in R Shell auch .. Aber es gibt mir immer den Fehler: Objekt lamba_1 nicht gefunden. Irgendeine Hilfe ?

+1

Objekte werden so gespeichert, wie Sie sie zuweisen. Wenn Sie 'source1_2 <- hmm_source()' eingeben, ist Ihr Ergebnis eine 'liste' mit dem Namen, den Sie angegeben haben:' source1_2' – Gregor

+1

Verwenden Sie '<< -', um Objekte innerhalb von Funktionen in der globalen Umgebung zu speichern. – count

+4

werden sie als 'source1_2 $ m1' und' source1_2 $ m2' gespeichert. Ich würde nicht raten, die '' '' '' '' '' '' '' '' '' '' '' 'Weise zu benutzen, um sie zu überschreiben - andernfalls überschreibst du Variablen in deinem GlobalEnv. Ich glaube nicht, dass dies ein guter Anwendungsfall für Nebenwirkungen in Ihrer Funktion ist. – Chris

Antwort

0

Objekte, die in Funktionen erstellt wurden, werden nicht in der globalen Umgebung gespeichert (standardmäßig sowieso). Wenn Sie Lambda_1 und Lambda_2 zurückgeben, sind sie Elemente des zurückgegebenen Objekts. Sie werden nicht separat existieren, aber von der Art, wie Sie die Funktion aufrufen, sollten sie als und source1_2$m2 existieren.

Verwandte Themen