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".