2012-08-24 12 views
5

समस्या परिभाषा: वर्ग "लोडिंग"मैं एक सॉर्टेड कारक लोडिंग टेबल कैसे निर्यात करूं?

की एक वस्तु का एक हल कर संस्करण निर्यात fa समारोह साइक-पैकेज के साथ एक कारक विश्लेषण चलाने के बाद, मैं एक कारक लोडिंग मेज है कि एक तरह लग रहा है मिल यहाँ दिखाया गया है:

+०१२३५१६४१०:

Loadings: 
     Factor1 Factor2 Factor3 
TH_Q1  0.173 0.548 0.403 
TH_Q2  0.306 0.291 0.825 
TH_Q3  0.334 0.203 0.825 
TH_Q4  0.262 0.536 0.171 
TH_Q5  0.235 0.686   
TH_Q6  0.125 0.836   
TH_Q7  0.200 0.838   
TH_Q8_A1       
TH_Q8_A2   0.155   
TH_Q9  0.644 0.133 0.171 
TH_Q10 0.608 0.208 0.157 
TH_Q11 0.569 0.161 0.306 
TH_Q12 0.722   0.127 
TH_Q13 0.661 0.311   
TH_Q14 0.562 0.407   
TH_Q15 0.675 0.422   

इस मेज पर समारोह print होने (जिसमें चर f.loadings में संग्रहित है) के बाद, मैं एक क्रमबद्ध तालिका print(f.loadings, digits=2, cutoff=.3, sort=TRUE) मिल

Loadings: 
     Factor1 Factor2 Factor3 
TH_Q9  0.64     
TH_Q10 0.61     
TH_Q11 0.57   0.31 
TH_Q12 0.72     
TH_Q13 0.66 0.31   
TH_Q14 0.56 0.41   
TH_Q15 0.68 0.42   
TH_Q1    0.55 0.40 
TH_Q4    0.54   
TH_Q5    0.69   
TH_Q6    0.84   
TH_Q7    0.84   
TH_Q2  0.31   0.82 
TH_Q3  0.33   0.83 
TH_Q8_A1       
TH_Q8_A2       

print हालांकि ऑब्जेक्ट की "अदृश्य" प्रतिलिपि देता है, इसलिए मैं इस परिणाम को अनुरोधित प्रारूप में निर्यात करने में सक्षम नहीं हूं। हालांकि मैं इस तालिका के एक .csv संस्करण को निर्यात करने का एक तरीका खोजना चाहता हूं।

मैं "लोडिंग" वर्ग की किसी ऑब्जेक्ट की सही सॉर्टिंग करने के लिए write.csv के पैरामीटर निर्दिष्ट करने का कोई तरीका नहीं ढूंढ पाया। प्रिंट फ़ंक्शन के परिणाम को असाइन करने से यह हल नहीं होता है, क्योंकि यह केवल अपरिवर्तित संस्करण देता है। इस प्रकार x <- print(f.loadings, digits=2, cutoff=.3, sort=TRUE) और बाद में नए चर एक्स के लिए कॉलिंग, अभी भी तालिका के अपरिवर्तित संस्करण को वापस कर देता है।

"लोडिंग" को सॉर्ट करने और इस ऑब्जेक्ट को स्पष्ट रूप से वापस करने के लिए कौन सा फ़ंक्शन उपयुक्त होगा? दूसरे शब्दों में, मैं इस तरह की एक क्रमबद्ध तालिका कैसे निर्यात कर सकता हूं?

कोड तालिका उत्पन्न करने के लिए:

f.loadings <- structure(c(0.172693322885797, 0.306277415972136, 0.334012445825371, 
0.261822356615649, 0.234600824098634, 0.124541887813939, 0.200125976802047, 
0.0199775267669519, 0.0771905784767979, 0.643886342785064, 0.608004298828405, 
0.569498016145868, 0.722454442131503, 0.660683752725898, 0.561975379133291, 
0.675119271585253, 0.548184083921831, 0.291215413974386, 0.20334622551054, 
0.535545380240845, 0.685635981787823, 0.836401389336655, 0.837525597359627, 
0.0186113870539496, 0.154659865540958, 0.132908227837058, 0.20832344061795, 
0.160657979843522, 0.0933961709813049, 0.311465272208257, 0.406860675137862, 
0.421946817384512, 0.402664774610544, 0.824934582975472, 0.825220077707656, 
0.170809720550637, -0.0486225264368695, 0.0612401518170266, 0.052596915030506, 
-0.0463868732056794, 0.0208945338424677, 0.171412077700389, 0.156524506151013, 
0.306203004564158, 0.127377474768802, -0.0869197819037828, -0.0962274476959987, 
-0.0465278761105364), .Dim = c(16L, 3L), .Dimnames = list(c("TH_Q1", "TH_Q2", "TH_Q3", "TH_Q4", "TH_Q5", "TH_Q6", "TH_Q7", "TH_Q8_A1", "TH_Q8_A2", "TH_Q9", "TH_Q10", "TH_Q11", "TH_Q12", "TH_Q13", "TH_Q14", "TH_Q15"), c("Factor1", "Factor2", "Factor3")), class = "loadings") 

उत्तर

4

यहां बताया गया है कि आप loadings के लिए डिफ़ॉल्ट प्रिंटिंग विधि को कैसे हैक कर सकते हैं। मैंने प्रिंट स्टेटमेंट newx पर सौंपा है और इसे निर्यात किया है। जब आप printLoadings को एक चर के परिणाम देते हैं, तो आपके पास आपके सॉर्ट किए गए ऑब्जेक्ट को आपके निपटारे पर रखा जाता है। नतीजा अब पात्रों की एक तालिका है। मैं इसे आपको संख्यात्मक रूप से परिवर्तित करने के लिए एक अभ्यास के रूप में छोड़ दूंगा।

> getS3method("print","loadings") #get the hidden method and modify it 
printLoadings <- function (x, digits = 3, cutoff = 0.1, sort = FALSE, ...) 
{ 
    Lambda <- unclass(x) 
    p <- nrow(Lambda) 
    factors <- ncol(Lambda) 
    if (sort) { 
     mx <- max.col(abs(Lambda)) 
     ind <- cbind(1L:p, mx) 
     mx[abs(Lambda[ind]) < 0.5] <- factors + 1 
     Lambda <- Lambda[order(mx, 1L:p), ] 
    } 
    cat("\nLoadings:\n") 
    fx <- format(round(Lambda, digits)) 
    names(fx) <- NULL 
    nc <- nchar(fx[1L], type = "c") 
    fx[abs(Lambda) < cutoff] <- paste(rep(" ", nc), collapse = "") 
    newx <- print(fx, quote = FALSE, ...) # I assigned this to a variable 
    vx <- colSums(x^2) 
    varex <- rbind(`SS loadings` = vx) 
    if (is.null(attr(x, "covariance"))) { 
     varex <- rbind(varex, `Proportion Var` = vx/p) 
     if (factors > 1) 
     varex <- rbind(varex, `Cumulative Var` = cumsum(vx/p)) 
    } 
    cat("\n") 
    print(round(varex, digits)) 
    invisible(newx) #previously returned x 
} 

mmm <- printLoadings(f.loadings) 
> str(mmm) 
chr [1:16, 1:3] " 0.173" " 0.306" " 0.334" " 0.262" " 0.235" ... 
- attr(*, "dimnames")=List of 2 
    ..$ : chr [1:16] "TH_Q1" "TH_Q2" "TH_Q3" "TH_Q4" ... 
    ..$ : chr [1:3] "Factor1" "Factor2" "Factor3" 

> as.table(mmm) 
     Factor1 Factor2 Factor3 
TH_Q1  0.173 0.548 0.403 
TH_Q2  0.306 0.291 0.825 
TH_Q3  0.334 0.203 0.825 
TH_Q4  0.262 0.536 0.171 
+0

धन्यवाद! मुझे 'getS3method' नहीं पता था, और विधियों (प्रिंट) में फ़ंक्शंस खोजते समय खो गया। भविष्य में भी वास्तव में सहायक होगा! – smoens

1

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

तो:

str(x) 
loadings [1:16, 1:3] 0.173 0.306 0.334 0.262 0.235 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : chr [1:16] "TH_Q1" "TH_Q2" "TH_Q3" "TH_Q4" ... 
    ..$ : chr [1:3] "Factor1" "Factor2" "Factor3" 

अब आप write.csv(x) उपयोग कर सकते हैं परिणाम निर्यात करने के लिए:

x <- print(f.loadings) 
x 
Loadings: 
     Factor1 Factor2 Factor3 
TH_Q1  0.173 0.548 0.403 
TH_Q2  0.306 0.291 0.825 
TH_Q3  0.334 0.203 0.825 
TH_Q4  0.262 0.536 0.171 
TH_Q5  0.235 0.686   
TH_Q6  0.125 0.836   
TH_Q7  0.200 0.838   
TH_Q8_A1       
TH_Q8_A2   0.155   
TH_Q9  0.644 0.133 0.171 
TH_Q10 0.608 0.208 0.157 
TH_Q11 0.569 0.161 0.306 
TH_Q12 0.722   0.127 
TH_Q13 0.661 0.311   
TH_Q14 0.562 0.407   
TH_Q15 0.675 0.422   

       Factor1 Factor2 Factor3 
SS loadings  3.259 3.145 1.747 
Proportion Var 0.204 0.197 0.109 
Cumulative Var 0.204 0.400 0.509 

Similary, str(x) परिणाम इंगित करता है एक मैट्रिक्स है।

+0

मेरे क्षमायाचना ... मैं प्रश्न में इस निर्दिष्ट किया जाना चाहिए था ... मैं इस कोशिश की, लेकिन अगर मैं आदेश 'चलाने x <- प्रिंट (f.loadings, अंक = 2, कटऑफ = .3, sort = TRUE) 'और बाद में नए चर x के लिए कॉल करें, यह तालिका के निरर्थक संस्करण को फिर से देता है। – smoens

0

प्रिंट फ़ंक्शन में सॉर्ट करने के बजाय fa.sort फ़ंक्शन का प्रयास करें।

है कि, अगर < च - पिता (Thurstone, 3) आप कर सकते हैं या तो प्रिंट (च, हल कर = TRUE) जो प्रिंट नहीं है लेकिन क्रमबद्ध वस्तु, या FS < वापस नहीं करता है - पिता। सॉर्ट (एफ) जो क्रमबद्ध ऑब्जेक्ट देता है जिसे आप एक सीएसवी के रूप में निर्यात कर सकते हैं।

विधेयक

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