risposta di flodel ha lavorato per la mia applicazione, in modo da sto andando posta w cappello che ho costruito su di esso, anche se questo è piuttosto privo di ispirazione. È possibile accedere a ogni elemento della lista con un ciclo for
, in questo modo:
#============== List with five elements of non-uniform length ================#
example.list=
list(letters[1:5], letters[6:10], letters[11:15], letters[16:20], letters[21:26])
#===============================================================================#
#====== for loop that names and concatenates each consecutive element ========#
derp=c(); for(i in 1:length(example.list))
{derp=append(derp,eval(parse(text=example.list[i])))}
derp #Not a particularly useful application here, but it proves the point.
sto usando codice come questo per una funzione che chiama certi insiemi di colonne da un frame di dati con i nomi delle colonne. L'utente inserisce una lista con elementi che rappresentano ciascuno diversi insiemi di nomi di colonne (ogni insieme è un gruppo di elementi appartenenti a una misura) e il grande riquadro di dati contenente tutte quelle colonne. Il ciclo for
applica ciascun elemento di elenco consecutivo come il set di nomi di colonna per una funzione interna * applicata solo al set di colonne correntemente denominato del frame di dati grandi. Quindi popola una colonna per loop di una matrice con l'output per il sottoinsieme del frame di dati grande che corrisponde ai nomi nell'elemento della lista corrispondente al numero di quel loop. Dopo il ciclo for
, la funzione termina emettendo quella matrice prodotta.
Non sono sicuro se stai cercando di fare qualcosa di simile con i tuoi elementi della lista, ma sono felice di aver colto questo trucco. Grazie a tutti per le idee!
"Secondo esempio"/info tangenziale per quanto riguarda l'applicazione del fattore di modello di risposta graduale segnando:
Ecco la funzione che ho descritto sopra, nel caso in cui qualcuno vuole calcolare Factor Model risposta graduata punteggi * in gran lotti ... Ogni colonna della matrice di output corrisponde a un elemento della lista (cioè un tratto latente con elementi di indicatore ordinale specificati dal nome della colonna nell'elemento di elenco) e le righe corrispondono alle righe del frame di dati utilizzato come ingresso. Ogni riga dovrebbe presumibilmente contenere le osservazioni reciprocamente dipendenti, come da un dato individuo, a cui appartengono i punteggi fattoriali nella stessa riga della matrice ouput.Inoltre, sento che dovrei aggiungere che se tutti gli elementi di un dato elenco utilizzano le stesse identiche opzioni di valutazione della scala Likert, il modello di risposta graduata potrebbe essere meno appropriato per il punteggio dei fattori rispetto a un modello di scala di valutazione (vedere http://www.rasch.org/rmt/rmt143k.htm).
'grmscores'=function(ColumnNameList,DataFrame) {require(ltm) #(Rizopoulos,2006)
x = matrix (NA , nrow = nrow (DataFrame), ncol = length (ColumnNameList))
for(i in 1:length(ColumnNameList)) #flodel's magic featured below!#
{x[,i]=factor.scores(grm(DataFrame[, eval(parse(text= ColumnNameList[i]))]),
resp.patterns=DataFrame[,eval(parse(text= ColumnNameList[i]))])$score.dat$z1}; x}
riferimento
* Rizopoulos, D. (2006). ltm: pacchetto R per analisi di modelli di variabili latenti e analisi della risposta degli elementi, Journal of Statistical Software, 17 (5), 1-25. URL: http://www.jstatsoft.org/v17/i05/
Il motivo per cui si ottiene un errore è che 'esempio.list $ attributo' non è un oggetto ma è il risultato dell'applicazione dell'operatore (' $ ', alias Extract, try -'? '" Backtick " '$'" backtick) alla coppia '(example.list, attribute)'. – Ryogi