12
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)

那么如果eval(parse(...))是次优的,还有什么方法可以做到这一点?

我正在使用 RCurl 从网站调用一些数据,fromJSON()在 rjson 包中使用后得到的是列表中的列表。列表的一部分具有将根据订单而改变的订单号的名称。该列表看起来像:

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

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

我想提取价值$orders$'5810584'$price

说列表在对象中dat。我用来提取它的方法eval(parse(...))是:

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

这样做的最佳方法是什么?

4

1 回答 1

19

实际上,该列表可能看起来有点不同。'$' 约定有点误导。试试这个:

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

'$' 不会评估它的参数,但 "[[" 会,所以or_ID会变成 "5810584"。

于 2012-06-14T01:03:15.983 回答