R में वेक्टर और सूची डेटा प्रकारों के बीच अंतर क्या हैं?


127

आर में वेक्टर और सूची डेटा प्रकारों के बीच मुख्य अंतर क्या हैं? इन दो डेटा प्रकारों का उपयोग (या नहीं) करने के क्या फायदे या नुकसान हैं?

मैं उन उदाहरणों को देखकर सराहना करूंगा जो डेटा प्रकारों के उपयोग के मामलों को प्रदर्शित करते हैं।

जवाबों:


77

तकनीकी तौर पर सूचियों हैं , वैक्टर, हालांकि बहुत कम है कि इस शब्द का प्रयोग करेंगे। "सूची" कई तरीकों में से एक है, दूसरों के साथ "तार्किक", "चरित्र", "संख्यात्मक", "पूर्णांक"। जिसे आप वैक्टर कह रहे हैं, वह कठोर आर पार्लियामेंट में "परमाणु वैक्टर" हैं:

 aaa <- vector("list", 3)
 is.list(aaa)   #TRUE
 is.vector(aaa)  #TRUE

सूची एक "पुनरावर्ती" प्रकार (वेक्टर की) हैं जबकि परमाणु वैक्टर नहीं हैं:

is.recursive(aaa)  # TRUE
is.atomic(aaa)  # FALSE

आप डेटा ऑब्जेक्ट्स को विभिन्न कार्यों के साथ संसाधित करते हैं, जो इस बात पर निर्भर करते हैं कि वे पुनरावर्ती, परमाणु या आयामी विशेषताएँ (मैट्रिसेस और सरणियाँ) हैं या नहीं। हालांकि, मुझे यकीन नहीं है कि विभिन्न डेटा संरचनाओं के "फायदे और नुकसान" की चर्चा एसओ के लिए पर्याप्त रूप से केंद्रित प्रश्न है। टॉमी ने जो कहा, उसे जोड़ने के लिए, सूची में अन्य वैक्टरों की एक मनमानी संख्या रखने में सक्षम होने के अलावा, डेटाफ्रेम की उपलब्धता है जो एक विशेष प्रकार की सूची है जिसमें एक आयामी विशेषता है जो इसकी संरचना को परिभाषित करती है। मेट्रिसेस और सरणियों के विपरीत जो वास्तव में परमाणु वस्तुओं को मोड़ रहे हैं, डेटाफ्रेम अलग-अलग प्रकारों को शामिल कर सकते हैं जिनमें कारक प्रकार शामिल हैं।

वहाँ भी चेतावनी है कि जब नाम के अलावा अन्य विशेषताएँ हैं तो is.vectorफ़ंक्शन वापस आ जाएगा FALSE। देखें: वेक्टर क्या है?


54

सूची "पुनरावर्ती" हैं। इसका मतलब यह है कि वे विभिन्न प्रकारों, यहां तक ​​कि अन्य सूचियों के मूल्यों को शामिल कर सकते हैं:

x <- list(values=sin(1:3), ids=letters[1:3], sub=list(foo=42,bar=13))
x # print the list
x$values   # Get one element
x[["ids"]] # Another way to get an element
x$sub$foo  # Get sub elements
x[[c(3,2)]]  # Another way (gets 13)
str(x)     # A "summary" of the list's content

डेटा सेट का प्रतिनिधित्व करने के लिए R में सूचियों का उपयोग किया जाता है: data.frameकक्षा अनिवार्य रूप से एक सूची है जहां प्रत्येक तत्व एक विशिष्ट प्रकार का एक स्तंभ है।

मॉडल का प्रतिनिधित्व करते समय एक और उपयोग होता है: lmएक सूची से परिणाम जिसमें उपयोगी वस्तुओं का एक गुच्छा होता है।

d <- data.frame(a=11:13, b=21:23)
is.list(d) # TRUE
str(d)

m <- lm(a ~ b, data=d)
is.list(m) # TRUE
str(m)

परमाणु वैक्टर (गैर-सूची जैसे, लेकिन संख्यात्मक, तार्किक और चरित्र) उपयोगी होते हैं क्योंकि सभी तत्व एक ही प्रकार के होते हैं। इससे उनमें बहुत तेजी से हेरफेर होता है।


20

किसी के रूप में जो आर में बस गया है, लेकिन एक सी / जावा / रूबी / पीएचपी / पायथन पृष्ठभूमि से आता है, यहां मैं इसके बारे में कैसे सोचता हूं।

A listवास्तव में एक सरणी + हैशमैप है। यह एक PHP साहचर्य सरणी है।

> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'

A vectorएक निश्चित प्रकार की सरणी / सूची है। इसे एक लिंक्ड लिस्ट की तरह समझें - क्योंकि डिसिमिलर आइटम्स को लिस्टेड लिस्ट में डालना एक एंटी-पैटर्न वैसे भी है। यह उसी अर्थ में एक वेक्टर है जो SIMD / MMX / वेक्टर इकाइयों शब्द का उपयोग करता है।


3
आप विधि keyका उपयोग करके वैक्टर में एस कर सकते हैं names
गोकुल_उप

9

यह और इसी तरह के परिचयात्मक सवालों के जवाब http://www.burns-stat.com/pages/Tutor/hints_R_beb.html पर दिए गए हैं

यह एक सौम्य परिचय माना जाता है जो आपको आर के साथ जल्दी से जल्दी उठने और दौड़ने का मौका देता है। कुछ हद तक यह सफल होता है।

--- संपादित करें: -

आगे समझाने का प्रयास; उपरोक्त संदर्भ से उद्धृत।

परमाणु वेक्टर

परमाणु वेक्टर की तीन किस्में हैं जिनसे आपका सामना होने की संभावना है:

  • "सांख्यिक"
  • "तार्किक"
  • "चरित्र"

परमाणु वैक्टर के बारे में याद रखने वाली बात यह है कि उनमें से सभी तत्व केवल एक प्रकार के हैं।

सूची

सूची में विभिन्न घटकों में विभिन्न प्रकार के आइटम हो सकते हैं। एक सूची के एक घटक को एक और सूची, एक परमाणु वेक्टर (और अन्य चीजें) होने की अनुमति है।

कृपया इस लिंक को भी देखें ।


2
डाउनवोट: आपको कम से कम हमें उस वेबसाइट के विशिष्ट अनुभाग की ओर संकेत करना चाहिए जो मूल प्रश्न का उत्तर देता है।
नबर

2

सूची में वर्ण, संख्यात्मक, तार्किक एट जैसे कई डेटा प्रकार शामिल हैं। लेकिन वेक्टर में केवल इसी प्रकार के डेटा होते हैं। पूर्व के लिए:

scores <- c(20,30,40,50)
student <- c("A","B","C","D")
sc_log <- c(TRUE,FALSE,FALSE,TRUE)

सूची के लिए:

mylist <- list(scores,student,sc_log)
# search for class of mylist vector 
#check structure of mylist using str() function.
str(mylist)
[1] list of 3
[1] $:num [1:4] 20 30 40 50
[2] $:chr [1:4] "A""B""C""D"
[3] $:log [1:4] TRUE FALSE FALSE TRUE

जिसका अर्थ है कि mylist में कई डेटा प्रकार जैसे संख्यात्मक, वर्ण और तार्किक युक्त सूची। लेकिन वेक्टर में सभी तत्वों में एकल डेटा प्रकार होंगे - वेक्टर

पूर्व के लिए:

वेक्टर के लिए:

vector1 <- c(1,2,3,4)
Class(vector1)
[1] "Numeric"

#which means all elements of vector containing single data type that is numeric only.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.