2016-05-12 4 views
0

Anmerkung: Ich habe zu R super (nur Übergang von Stata)!Versuch, "plm" -Objekte in R zu durchlaufen und Koeffizienten zu ersetzen (atomarer Vektor, nicht-Sprache)

Hallo Leute! Ich habe eine große Anzahl von "plm" -Objekten nummeriert als plm_f_1_1, plm_f_1_2, ..., plm_f_1_17, plm_f_2_1, ... und so weiter, und ich habe Datenrahmen von Koeffizienten gespeichert, sagen wir in "female_q [1,]" . Ich versuche, durch die „plm“ Objekte Schleife und versuchen, diesen Vorgang zu tun:

for (i in 1:26) { 
    plm_f_1_1$coefficients[i]=female_q[1,i] 
} 

Also das für ein plm Objekt funktioniert, wenn ich in einer Schleife über die letzte Nummer im Objektnamen versuchen, erhalte ich dieser Fehler (nur ein Punkt in der female_q Datenrahmen zeigt), wenn ich versuchen erhalten:

get(paste0("plm_f_1_",i))$coefficients[1]=female_q[1,1] 

Error in get(paste0("plm_f_1_", i))$coefficients[1] = female_q[1,1] : 
    target of assignment expands to non-language object 

und dieses mit zuweisen:

assign(paste0("plm_f_1_",i)$coefficients[1],1) 

Error in paste0("plm_f_1_", i)$coefficients : 
    $ operator is invalid for atomic vectors 

Hier sind einige Beschreibungen, wie die Strukturen wie folgt aussehen:

str(get(paste0("plm_f_1_",i))$coefficients) 
Named num [1:26] 0.1362 -0.1835 -0.3464 0.2858 -0.0634 ... 
- attr(*, "names")= chr [1:26] "(Intercept)" "dem_log_gdppc_5" "dem_log_mat_educ_5" "dem_log_pop_15_share_5" ... 


get(paste0("plm_f_1_",i))$coefficients[1] 
(Intercept) 
    0.1361659 

female_q[1,1] 
[1] 0.1314744 

Ich frage mich, ob ich die Art und Weise ändern müssen female_q genannt wird, oder etwas in diese Richtung? Würde mich über jede Hilfe freuen! Vielen Dank!!!

Antwort

0

Es macht nichts, ich habe es: Ich habe meine plm alle Objekte in einer Liste als solche setzen, und dann habe ich nicht die bekommen oder zuweisen Befehl verwenden müssen, und es funktioniert perfekt:

plm_female_all[[i]]$coefficients[x] = female_q[1,x] 
0

Gratulation an list ‚s von den chaotischen get‘ s und assign ‚s

ich habe nicht getestet für den Übergang, aber diese Verarbeitung

vereinfachen könnte
PLM_List = ls(pattern="^plm_f_*"); 


fn_ProcessDF = function(PLMObj = PLMname,replacementDF = female_q, colIndices = 1:26) { 

PLMObj = get(PLMObj) 

PLMObj$coefficients[colIndices] = replacementDF[,colIndices] 

PLMObj = PLMObj 

} 

lapply(1:length(PLM_List),function(x) fn_ProcessDF(PLMObj = x ,replacementDF = female_q[x,], colIndices = 1:26)) 
Verwandte Themen