r parsing

R: eval(parse(...)) a menudo es subóptimo



parsing (1)

require(''fortunes'') fortune(''106'') Personally I have never regretted trying not to underestimate my own future stupidity. -- Greg Snow (explaining why eval(parse(...)) is often suboptimal, answering a question triggered by the infamous fortune(106)) R-help (January 2007)

Entonces, si eval(parse(...)) es subóptimo, ¿qué otra forma de lograrlo?

Estoy llamando a algunos datos de un sitio web usando RCurl, lo que obtengo después de usar fromJSON() en el paquete rjson es una lista dentro de una lista. Parte de la lista tiene el nombre de un número de orden que cambiará según el orden. La lista se ve algo así como:

$orders $orders$''5810584'' $orders$''5810584''$quantity [1] 10 $orders$''5810584''$price [1] 15848

Quiero extraer el valor en $orders$''5810584''$price

Digamos que la lista está en el dat objeto. Lo que hice para extraer esto usando eval(parse(...)) fue:

or_ID <- names(dat$orders) # get the order ID number or_ID "5810584" sell_price <- eval(parse(text=paste(''dat$'',"orders$","''", or_ID, "''", "$price", sep=""))) sell_price 15848

¿Cuál sería una forma más óptima de hacer esto?


En realidad, la lista probablemente se ve un poco diferente. La convención ''$'' es algo engañosa. Prueba esto:

dat[["orders"]][[ or_ID ]][["price"]]

El ''$'' no evalúa sus argumentos, pero "[[" ''lo hace, por lo que'' or_ID ''se convertirá en "5810584".