2014-12-15 13 views
6

Ich verstehe, dass c verwendet wird, um Elemente zu kombinieren. Aber was ist der Unterschied zwischen 1:10 und c (1:10)? Ich sehe, dass die Ausgänge gleich sind. Sollte nicht c (1:10) einen Fehler geben, weil 1:10 bereits alle Elemente kombiniert?Unterschied zwischen 1:10 und c (1:10)

> 1:10 
[1] 1 2 3 4 5 6 7 8 9 10 
> c(1:10) 
[1] 1 2 3 4 5 6 7 8 9 10 
> class(1:10) 
[1] "integer" 
> class(c(1:10)) 
[1] "integer" 
+5

'c' wird verwendet, um zu verketten nicht zu kombinieren. – LyzandeR

+2

Nein, 'c' kann verwendet werden, um * eine beliebige Anzahl von Elementen oder Objekten zu verketten, einschließlich 1. Siehe die Hilfedatei'? C'; speziell das Argument "...". – nrussell

+2

@ LyzandeR und @nrussell, stimmt die offizielle Dokumentation nicht oder zumindest nicht sinnvoll zwischen den Begriffen verketten und kombinieren. Der Titel der Hilfeseite und die Beschreibung sagen, dass es Elemente kombiniert, und der Text für das Argument "..." besagt, dass dies die Objekte sind, die verkettet werden sollen. Bei den Hilfstiteln ist 'cat' die Funktion, die Verkettung ausführt. – Aaron

Antwort

8

Wenn Sie (aka c Funktion) kombinieren mit nur einem Parameter ist es das gleiche wie die Identität (aka nicht die c Funktion aufrufen). Daher ist c(1:10) das gleiche wie 1:10. Sie können jedoch beliebig viele Argumente mit unterschiedlichen Typen (Zeichen, Zahlen ...) kombinieren. Es wird den Typ für Sie konvertieren.

all.equal(1:10,c(1:5,6:10)) 

[1] TRUE 

all.equal("meow",c("meow")) 

[1] TRUE 

c(1:5,6:10,"meow") 

[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "meow" 

class(c(1:5,6:10,"meow")) 

[1] "character" 

Ein weiterer Unterschied ist, dass Sie c mit dem Parameter rekursiv aufrufen können. Wie das Doc sagt:

?c 

Usage 

c(..., recursive = FALSE) 
Arguments 

... 
objects to be concatenated. 

recursive 
logical. If recursive = TRUE, the function recursively descends through lists (and pairlists) combining all their elements into a vector. 
+2

Schöne Antwort, obwohl in der Dokumentation für "c", kombinieren und verketten scheinen ähnlich verwendet werden. Den Titeln der Hilfeseiten folgend, denke ich an "c" als Kombinieren, indem es Vektoren in einen längeren Vektor und "Einfügen" (und auch "Katze") als Verkettung kombiniert, indem es mehrere Zeichenketten zu einer verkettet (oder ein Vektor, wenn er vektorisiert verwendet wird). – Aaron

+0

Es macht Sinn. Ich werde es bearbeiten. – zipp

Verwandte Themen