आर में एक अजगर तानाशाह के बराबर


82

मैं आर के मूल रूप से अजगर के समकक्ष बनाना चाहता हूं, मेरे पास अजगर में है:

visited = {}

if atom_count not in visited:
  Do stuff
  visited[atom_count] = 1

यह विचार है, अगर मैंने उस विशिष्ट, परमाणु_काउंट को देखा है, तो मैंने [atom_count] = 1. का दौरा किया है। Atom_Count एक पूर्णांक है।

धन्यवाद!


5
आर पैकेज hashको इसके लगभग पायथन जैसे एक्सेस फ़ंक्शंस के साथ देखें।
हंस डब्ल्यू

@ कसे जो ओ (n) खर्च होंगे। डिक्ट एलिमेंट एक्सेस निरंतर है।
अनिलबे जुले

जवाबों:


72

आर में एक अजगर के लिए सबसे करीबी बात बस एक सूची है। अधिकांश R डेटा प्रकारों की तरह, सूचियों में एक नाम विशेषता हो सकती है जो सूचियों को नाम-मान जोड़े के एक सेट की तरह कार्य करने की अनुमति दे सकती है:

> l <- list(a = 1,b = "foo",c = 1:5)
> l
$a
[1] 1

$b
[1] "foo"

$c
[1] 1 2 3 4 5

> l[['c']]
[1] 1 2 3 4 5
> l[['b']]
[1] "foo"

अब सामान्य अस्वीकरण के लिए: वे बिल्कुल समान नहीं हैं ; मतभेद होंगे। तो आप वास्तव में जिस तरह से आप अजगर में एक तानाशाह का उपयोग कर सकते हैं सूचियों का उपयोग करने की कोशिश करने के लिए निराशा को आमंत्रित किया जाएगा।


आप इस तरह की सूची के माध्यम से कैसे प्रोग्राम कर सकते हैं? भोला l$names(l)[1]स्पष्ट रूप से विफल रहता है। मैं भी l[which()]काम करने में सक्षम नहीं है
3pitt 20

@MikePalmice एक forपाश से अलग है , जो कि हर भाषा के आसपास बहुत ज्यादा है, में एक विकल्प है lapply। विभिन्न सिंटैक्स के साथ संबंधित चीजें भी हैं, जैसे Map, और एक संपूर्ण पैकेज, बहुत सारे कार्यात्मक प्रोग्रामिंग सामान के लिए purrr
जोरन

@ माइकलाइमाइस, मुझे लगता है कि l[[names(l)[1]]काम करना चाहिए। वैसे भी, आप बस इस तरह से पुनरावृत्त कर सकते हैं: l[[1]]नामों का उपयोग किए बिना। ध्यान दें कि एकल कोष्ठक []एक सूची लौटाएगा, जबकि डबल कोष्ठक [[]]सूची के अंदर की वस्तु लौटाएगा।
Javi_VM

1
वाह, अन्य भाषाओं में इतनी सरल बात r में मुश्किल है? हमें कहते हैं कि मैं एक चर में निहित स्ट्रिंग है। अगर मैं इसे एक कुंजी बनाने की कोशिश करता हूं, तो यह चर के मूल्य के बजाय मुख्य नाम के रूप में चर नाम को चुनता है।
वांडिम

1
@wondim आप के साथ एक चर से सूची आइटम के नाम सेट कर सकते हैं names(list) <- vector_of names,, subsetted काम के साथ-साथ काम करता है names(list)[1] <- "foo"। यह भी देखें setNames()
18

5

मेरा मानना ​​है कि हैश टेबल का उपयोग (एक नया वातावरण बनाना) आपकी समस्या का समाधान हो सकता है। मुझे पता है कि यह कैसे करना है, लेकिन मैंने अभी कल talkstats.com पर ऐसा किया था।

यदि आपका शब्दकोश बड़ा है और केवल दो कॉलम हैं तो यह जाने का रास्ता हो सकता है। यहाँ नमूना आर कोड के साथ टॉकस्टेट्स धागे का लिंक दिया गया है:

बड़ा लिंक


नोट data.tableऔर आर के स्वयं के वेक्टर लुक अप में इस समय के बाद से तेजी से सुधार हुआ है।
टायलर रिंकर

4

यदि, आपके मामले में, आप बस उसी प्रकार के मूल्यों को संग्रहीत करने के लिए अपना "शब्दकोश" चाहते हैं, तो आप बस एक वेक्टर का उपयोग कर सकते हैं, और अपने तत्व को नाम दे सकते हैं।

> l <- c(a = 1, b = 7, f = 2)
> l
a b f 
1 7 2

यदि आप "कुंजी" का उपयोग करना चाहते हैं, तो उपयोग करें names

> names(l)
[1] "a" "b" "f"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.