2012-06-13 8 views
8
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(...)) करने से इनकी क्या एक और तरीका यह पूरा करते हैं करने के लिए है?आर: eval (पार्स (...)) अक्सर करने से इनकी

मैं आरसीआरएल का उपयोग कर वेबसाइट से कुछ डेटा बुला रहा हूं, आरजेसन पैकेज में fromJSON() का उपयोग करने के बाद मुझे जो मिलता है वह एक सूची में एक सूची है। सूची में से एक आदेश संख्या का नाम है जो आदेश के आधार पर बदल जाएगा। सूची लग रहा है कि:

$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 

क्या ऐसा करने का एक और अधिक इष्टतम तरीका क्या होगा?

+5

$ $ आदेश [[or_ID]] $ मूल्य? – Dason

+0

काम नहीं करता है क्योंकि or_ID एक चरित्र है और संख्यात्मक नहीं है। $ ऑर्डर का उपयोग करते हुए [[1]] $ मूल्य काम करेगा – Kevin

+0

'नाम' (नाम $ आदेश) में नाम की स्थिति प्राप्त करने के लिए 'मिलान' का उपयोग करें। – joran

उत्तर

19

असल में सूची शायद थोड़ा अलग दिखती है। '$' सम्मेलन कुछ हद तक भ्रामक है। इस प्रयास करें:

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

'$' अपने तर्कों का मूल्यांकन नहीं है, लेकिन "[[" करता है, तो 'or_ID' "5,810,584" में बदल जाएगा।

+0

क्या यह कार्यात्मक रूप से @Dason की टिप्पणी के समान नहीं है? हो 'मैं तुम्हारा बिंदु समझता हूं:' [['आपको [[foo_ID]] [[or_ID]] [[bar_ID]] [ –

+0

सत्य 'को सामान्यीकृत करने की अनुमति देता है। 'एक्स [[" ए "]]' 'x $ a' है। मैं उस बिंदु पर जोर देने की कोशिश कर रहा था कि "[[" आपको मूल्यांकन के स्तर को मिश्रण करने की अनुमति देता है: उद्धृत मूल्यों या प्रतीकों का उपयोग करें जिनका मूल्यांकन किया जाएगा। एक्स $ औपचारिकता भ्रामक है कि यह नए उपयोगकर्ता को लगता है कि वहां 'ए' का मूल्यांकन हो सकता है, जब विपरीत मामला है। –

+3

या 'डेटा [[सी (" ऑर्डर ", या_आईडी," कीमत ")]] – hadley

संबंधित मुद्दे