2010-11-18 25 views

cevap

18

Evet, var.

apply(d,1,paste,collapse=" ") 
[1] "Data 2" "Data 73" 
# convert to matrix using as.matrix to get exactly your solution 

?paste hızlı bir glace sonra ?apply ve ?paste

+0

blarg, tabi ki, uygulamalısın, duh :(Ama macun, çöküş = "" bölüm asla anlamayacaktım, teşekkürler :) – gakera

+0

@gakera: "Collapse =" "parçasını bulmak," bölümü oldukça kolay Eğer '' paste' belgelerini okursanız. –

+0

Yardım, en azından benim sürümümde olmayan herhangi bir collapse = "" kullanımı örneğini içermez. Ama metinden, ne kadar net olduğunu, tüm gürültüde gördüğünüzü anlıyorsunuz. – gakera

3

Bkz ;-) "uygulamak" denir, bu apply Verilen örnekte için gerekli değildir açıktır. Birkaç sütun olsa kullanışlı olurdu.

> paste(d[,1],d[,2]) 
[1] "Data 2" "Data 73" 
+0

Ancak satırları açıkça belirtmeden çalışan genel bir yönteme ihtiyacım var. Üzgünüm, bu konuda yeterince açık değildim, ancak başvuru yöntemi, yapmam gerekenden çok iyi çalışıyor. – gakera

+0

+1: çok doğru. –

1

?apply başvurmadan bunu yapmak için genel bir yol: alt simgeler önlemek için kullanılır as.data.frame

do.call(paste, as.data.frame(d)) 
[1] "Data 2" "Data 73" 

.

Düzenleme:

do.call ilk bağımsız değişken olarak başka bir işlevi alan bir fonksiyon ve ikinci bağımsız değişken olarak bir listesidir. Genellikle argüman listelerini işlevlere göndermek için kullanılır (bizim durumumuzda d ve paste() arasındaki sütunlar). Bu numarayı çalışmak için bir data.frame (bir liste türü) olarak gönderiyoruz.

+0

Bu doğru. Veriler zaten bir data.frame ise verimlilik artışı daha fazla olacaktır, ancak 'apply() 'çözümü vektörler için çok daha hızlıdır. Bunun avantajı, birinin yapıştırıcıyı uygularken tek bir veri türüyle sınırlandırılmasının gerekmemesidir, fakat aynı zamanda bir çok dezavantaj vardır: örneğin, sütunlar yerine satırlara yapıştırmak, yalnızca uygulamada bir sayı değişikliği gerektirir(). 'çözüm, bu büyük kod değişiklikleri gerektirir. Genel olarak, bu çözüm yalnızca "expand.grid()" ile bir indeks yaptığım ve bunları "do.call (paste)" ile birleştirdiğim tipik kullanım durumlarım içindir. –