2015-09-22 8 views
5

को देखते हुए:वेक्टर subsetting बनाम सूची subsetting

actors_vector <- c("Jack Nicholson", "Shelley Duvall", "Danny Lloyd", 
        "Scatman Crothers", "Barry Nelson") 

reviews_factor <- factor(c("Good", "OK", "Good", "Perfect", 
          "Bad", "Perfect", "Good"), 
         levels = c("Bad", "OK", "Good", "Perfect"), 
         ordered = TRUE) 

shining_list <- list(title = "The Shining", 
        actors = actors_vector, 
        reviews = reviews_factor) 

shining_list 
$title 
[1] "The Shining" 

$actors 
[1] "Jack Nicholson" "Shelley Duvall" "Danny Lloyd"  "Scatman Crothers" 
[5] "Barry Nelson"  

$reviews 
[1] Good OK  Good Perfect Bad  Perfect Good 
Levels: Bad < OK < Good < Perfect 

$boxoffice 
       US Non-US 
First release 39  47 
Director's cut 18  14 

क्यों shining_list[[3]][3] और shining_list$reviews[3] वापसी:

[1] Good 
Levels: Bad < OK < Good < Perfect 

shining_list[[c(3,3)]] जबकि वापसी:

[1] 3 

यह वेक्टर पर एक अनुभाग है सब्सक्रिप्शन बनाम सूची सदस्यताDataCamp पर।

+1

आपके पास समीक्षाओं में एक कारक है। जब आप 'सी (3,3) 'के साथ निकालें करते हैं, तो इसे एक पूर्णांक में परिवर्तित कर दिया जाता है। –

+0

ओपी, हालांकि, _why_ पूछ रहा है। यह _ "' [['को सूचियों के लिए पुनरावर्ती रूप से लागू किया जा सकता है, ताकि यदि एकल सूचकांक' i' लंबाई 'पी' का वेक्टर है, 'alist [[i]] 'alist के बराबर है [[i1 ]] '... '[[आईपी]]' एक सूची में अंतिम इंडेक्सिंग परिणाम के अलावा सभी प्रदान करते हैं।", लेकिन 'shining_list [[3]] [[3]]' रिटर्न '[1] अच्छा'/'evels : खराब <ठीक <अच्छा <बिल्कुल सही 'और न केवल' [1] 3'। – hrbrmstr

उत्तर

4

यह है कि कारकों वैक्टर नहीं हैं इस तथ्य के कारण हुई है:

unclass(reviews) 
## [1] 3 2 3 4 1 4 3 
## attr(,"levels") 
## [1] "Bad"  "OK"  "Good" "Perfect" 

:

reviews <- factor(c("Good", "OK", "Good", "Perfect", "Bad", "Perfect", "Good"), 
        levels=c("Bad", "OK", "Good", "Perfect"), ordered=TRUE) 
is.vector(reviews) 
## [1] FALSE 

आंतरिक कारक स्तर कुछ संरचना के साथ एक पूर्णांक वेक्टर शीर्ष पर परिभाषित किया गया है जमा हो जाती है कुछ मामलों में यह संरचना ध्वस्त हो जाएगी, और आप केवल पूर्णांक प्रतिनिधित्व के साथ छोड़ दिया जाएगा। मुझे लगता है कि आपका उदाहरण उन मामलों में से एक है, कुछ अन्य हैं:

c(reviews[3], reviews[4]) 
## [1] 3 4 
ifelse(TRUE, reviews[1], reviews[2]) 
## [1] 3 
संबंधित मुद्दे