2012-07-15 12 views
45

c अंग्रेजी में वेक्टर का संक्षेप नहीं है, तो आर में वेक्टर को परिभाषित करने के लिए c() का उपयोग क्यों करें?वेक्टर को परिभाषित करने के लिए सी() का उपयोग क्यों करें?

v1<- c(1,2,3,4,5) 
+1

ग == शायद, बनाने? – duffymo

+10

? सी बताता है कि यह गठबंधन के लिए खड़ा है। सहायता फ़ाइल दिखाती है कि सूचियों के संयोजन के लिए भी इसका उपयोग किया जा सकता है। –

+0

सहायता फ़ाइल बताती है कि फ़ंक्शन ऑब्जेक्ट्स को जोड़ता है, लेकिन सी वास्तव में संयोजक के लिए खड़ा होता है। सहायता फ़ाइल में concatenate का भी उल्लेख किया गया है। "...: वस्तुओं को संयोजित किया जाना चाहिए।" मुझे लगता है कि उन्होंने हेडर में गठबंधन किया क्योंकि यह अधिक बोलचाल है। – sayhey69

उत्तर

17

ओवेन का जवाब सही है, लेकिन एक अन्य बात ध्यान में रखना है कि सी() केवल वैक्टरों से अधिक समेकित हो सकता है।

> x = list(a = rnorm(5), b = rnorm(7)) 
> y = list(j = rpois(3, 5), k = rpois(4, 2), l = rbinom(9, 1, .43)) 
> foo = c(x,y) 
> foo 
$a 
[1] 0.280503895 -0.853393705 0.323137905 1.232253725 -0.007638861 

$b 
[1] -2.0880857 0.2553389 0.9434817 -1.2318130 -0.7011867 0.3931802 -1.6820880 

$j 
[1] 5 12 5 

$k 
[1] 3 1 2 1 

$l 
[1] 1 0 0 1 0 0 1 1 0 

> class(foo) 
[1] "list" 

दूसरा उदाहरण:

> x = 1:10 
> y = 3*x+rnorm(length(x)) 
> z = lm(y ~ x) 
> is.vector(z) 
[1] FALSE 
> foo = c(x, z) 
> foo 
[[1]] 
[1] 1 

[[2]] 
[1] 2 

[[3]] 
[1] 3 

[[4]] 
[1] 4 

[[5]] 
[1] 5 

[[6]] 
[1] 6 

[[7]] 
[1] 7 

[[8]] 
[1] 8 

[[9]] 
[1] 9 

[[10]] 
[1] 10 

$coefficients 
(Intercept)   x 
    0.814087 2.813492 

$residuals 
     1   2   3   4   5   6   7 
-0.2477695 -0.3375283 -0.1475338 0.5962695 0.5670256 -0.5226752 0.6265995 
     8   9   10 
0.1017986 -0.4425523 -0.1936342 

$effects 
(Intercept)   x              
-51.50810097 25.55480795 -0.05371226 0.66592081 0.61250676 -0.50136423 

    0.62374031 0.07476915 -0.49375185 -0.26900403 

$rank 
[1] 2 

$fitted.values 
     1   2   3   4   5   6   7   8 
3.627579 6.441071 9.254562 12.068054 14.881546 17.695038 20.508529 23.322021 
     9  10 
26.135513 28.949005 

$assign 
[1] 0 1 

$qr 
$qr 
    (Intercept)   x 
1 -3.1622777 -17.39252713 
2 0.3162278 9.08295106 
3 0.3162278 0.15621147 
4 0.3162278 0.04611510 
5 0.3162278 -0.06398128 
6 0.3162278 -0.17407766 
7 0.3162278 -0.28417403 
8 0.3162278 -0.39427041 
9 0.3162278 -0.50436679 
10 0.3162278 -0.61446316 
attr(,"assign") 
[1] 0 1 

$qraux 
[1] 1.316228 1.266308 

$pivot 
[1] 1 2 

$tol 
[1] 1e-07 

$rank 
[1] 2 

attr(,"class") 
[1] "qr" 

$df.residual 
[1] 8 

$xlevels 
named list() 

$call 
lm(formula = y ~ x) 

$terms 
y ~ x 
attr(,"variables") 
list(y, x) 
attr(,"factors") 
    x 
y 0 
x 1 
attr(,"term.labels") 
[1] "x" 
attr(,"order") 
[1] 1 
attr(,"intercept") 
[1] 1 
attr(,"response") 
[1] 1 
attr(,".Environment") 
<environment: R_GlobalEnv> 
attr(,"predvars") 
list(y, x) 
attr(,"dataClasses") 
     y   x 
"numeric" "numeric" 

$model 
      y x 
1 3.379809 1 
2 6.103542 2 
3 9.107029 3 
4 12.664324 4 
5 15.448571 5 
6 17.172362 6 
7 21.135129 7 
8 23.423820 8 
9 25.692961 9 
10 28.755370 10 
+3

वास्तव में एक सूची _is_ मोड "सूची" का एक वेक्टर है। यदि आप सटीक आर शब्दावली का उपयोग करना चाहते हैं तो आपको परमाणु और पुनरावर्ती वैक्टरों के बीच भेद करने की आवश्यकता है। 'is.vector (सूची (ए = 1)) # [1] TRUE' –

+0

@DWin दूसरे उदाहरण के बारे में क्या? एलएम अभी भी मोड "सूची" का है लेकिन यह एक वेक्टर नहीं है। – sayhey69

+0

'is.vector' फ़ंक्शन FALSE लौटाता है जब ऑब्जेक्ट के नामों के अलावा अन्य विशेषताएँ होती हैं। आज़माएं: 'कक्षा (जेड) <- न्यूल; is.vector (z) ' –

51

यह एक अच्छा सवाल है, और जवाब अजीब तरह का है। "सी", मानो या न मानो, "गठबंधन" है, जो है यह आम तौर पर क्या करता है के लिए खड़ा है:

> c(c(1, 2), c(3)) 
[1] 1 2 3 

लेकिन ऐसा होता है आर में, एक नंबर बस लंबाई 1 का एक वेक्टर है कि:

> 1 
[1] 1 

तो, जब आप वेक्टर बनाने के लिए c() का उपयोग करते हैं, तो आप वास्तव में जो कर रहे हैं वह 1-लंबाई वाले वैक्टरों की श्रृंखला को एक साथ जोड़ रहा है।

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

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