r parsing expression eval interpreter

Evitar el constructo infame "eval(parse())"



parsing expression (2)

Si el nombre de su lista principal va a cambiar y será accedido por una variable con el nombre, entonces lo mejor es poner esas listas en otra lista, entonces puede acceder a la lista que desea usando [[ . También lea la fortune(312) y la ayuda en ?''[['' .

Luego puede acceder a las piezas de diferentes maneras (detalladas en la página de ayuda ?''[['' ).

mylist <- list() mylist$bar <- bar mylist[[rab]][[''oof'']] #or mylist[[ c(rab,''oof'') ]]

Ok, entonces estoy ejecutando algunos bucles para procesar datos almacenados en objetos de lista. Siempre consciente de la infame advertencia de la fortune no usar eval(parse(mystring)) , se me ocurrió esto:

Rgames> bar $foo $foo$fast [1] 1 2 3 4 5 $foo$slow [1] 6 7 8 9 10 $oof $oof[[1]] [1] 6 7 8 9 10 $oof[[2]] [1] 1 2 3 4 5 Rgames> rab<-''bar'' Rgames> do.call(''$'',list(as.name(rab),''oof'')) [[1]] [1] 6 7 8 9 10 [[2]] [1] 1 2 3 4 5

Por lo general, seleccionaría una lista (de qué bar es una de ellas) y luego un elemento de la lista (por ejemplo, oof ) que contiene mis datos. El código anterior hace lo mismo que eval(parse(text=paste(rab,''$'',''oof'',sep=''''))) .
Estoy haciendo todo esto específicamente porque quiero usar los nombres de las listas en lugar de la notación [[x]] como un mecanismo de seguridad (porque no todos los objetos de la lista tienen su contenido en el mismo orden).

¿Debo seguir los consejos de DWin en R: eval (parse (...)) es a menudo subóptimo ?


Usando get y [[ :

bar <- list(foo = list(fast = 1:5, slow = 6:10), oof = list(6:10, 1:5)) rab <- ''bar'' get(rab)[[''oof'']] # [[1]] # [1] 6 7 8 9 10 # # [[2]] # [1] 1 2 3 4 5