2016-09-01 5 views
20

शायद एक बेवकूफ सवाल है, लेकिन मैंने हाल ही में मैट डॉउल को as.factor() के साथ कुछ कोड लिखा है, विशेष रूप से for (col in names_factors) set(dt, j=col, value=as.factor(dt[[col]]))this answer पर टिप्पणी में। मैंने इस स्निपेट का इस्तेमाल किया, लेकिन मुझे स्पष्ट रूप से कारक स्तर निर्धारित करने की आवश्यकता थी, इसलिए मुझे as.factor(dt[[col]]) से factor(dt[[col]], levels=my_levels) बदलना पड़ा। यह मुझे सोच रहा है, as.factor() बनाम factor() का उपयोग करने का क्या फायदा है (यदि कोई है)?केवल कारक के बजाय .factor() का उपयोग क्यों करें()

+4

नामकरण स्थिरता एक बड़ी है। लगभग सभी सामान्य वर्गों में 'as.class' फ़ंक्शन होता है। – Gregor

उत्तर

21

as.factorfactor के लिए एक आवरण है, लेकिन यह जल्दी वापसी की अनुमति देता है इनपुट वेक्टर पहले से ही एक कारक है:

function (x) 
{ 
    if (is.factor(x)) 
     x 
    else if (!is.object(x) && is.integer(x)) { 
     levels <- sort(unique.default(x)) 
     f <- match(x, levels) 
     levels(f) <- as.character(levels) 
     if (!is.null(nx <- names(x))) 
     names(f) <- nx 
     class(f) <- "factor" 
     f 
    } 
else factor(x) 
} 

प्रति @Frank: यहाँ स्पष्ट उन्होंने कहा, लेकिन यह एक मात्र आवरण नहीं है चूंकि यह "त्वरित वापसी" कारक स्तर और आदेश-नास छोड़ देगा, जबकि factor() अकेले नहीं होगा:

f = factor("a", levels=c("a","b")) 
#[1] a 
#Levels: a b 

factor(f) 
#[1] a 
#Levels: a 

as.factor(f) 
#[1] a 
#Levels: a b 
संबंधित मुद्दे