2016-03-30 14 views
5

Julia'da R'nin paste() işlevi gibi davranan bir işlevi var mı? Özellikle, iki vektör fonksiyonunu verirsek, iki giriş vektörünün eleman-bilge birleştirme ile tek bir vektör döndürür.Julia'nın R's paste() işlevine eşdeğer

Etrafa baktım ve bunun dokümanlardaki veya başka bir şekilde yanıtını bulamıyorum. John Myles White tarafından An older post, Julia'nın join() işlevinin en yakın analog olduğunu gösterir, ancak dizelerin vektörlerinde yalnızca eleman dizileriyle değil, yalnızca dizelerle çalışır gibi görünür.

Şimdilik, sadece aşağıdaki işlevi kullanıyorum join() çağıran öğeler üzerinde döngüler, ancak daha iyi bir yaklaşım olup olmadığını merak ediyorum.

x = ["aa", "bb", "cc"] 
y = ["dd", "ee", "ff"] 

function mypaste(v1, v2) 
    n = length(v1) 
    res = Array{ASCIIString}(n) 
    for i = 1:n 
     res[i] = join([v1[i], v2[i]]) 
    end 
    return res 
end 

mypaste(x, y) 

mypaste() Running bize istendiği gibi aşağıdaki çıktıyı verir.

3-element Array{ASCIIString,1}: 
"aadd" 
"bbee" 
"ccff" 

İyi bir alternatif var mı? join() işlevini yanlış anlıyor muyum?

cevap

8

(liste anlama için @DSM cevaba bakınız). Bir dizide dizeleri birleştirmek için birleştirme kullanılır; İki farklı koleksiyondaki dizeleri birleştirdikten sonra. Eğer zip ile join için gereken geçici koleksiyonlar oluşturmak için kolay (ve verimli) iken Yani, string işlev veya çarpma kullanarak bunu önleyebilirsiniz:

julia> map(string, x, y) 
3-element Array{ASCIIString,1}: 
"aadd" 
"bbee" 
"ccff" 

julia> map(*, x, y) 
3-element Array{ASCIIString,1}: 
"aadd" 
"bbee" 
"ccff" 

Daha da iyisi (ama yarı yarıya belki çok zeki), yayın elemanı-bilge çarpım operatörü var .*:

julia> x .* y 
3-element Array{ASCIIString,1}: 
"aadd" 
"bbee" 
"ccff" 
4

Sen çiftleri almak için bir liste anlama ve zip kullanabilirsiniz:

julia> x = ["aa", "bb", "cc"]; 

julia> y = ["dd", "ee", "ff"]; 

julia> [join(i) for i=zip(x,y)] 
3-element Array{ByteString,1}: 
"aadd" 
"bbee" 
"ccff" 
4

map kullanılabilir. Tek liner map(join,zip(x,y))'dur. Ayrıca z ekleyen aşağıdaki örnekte olduğu gibi:

julia> x = ["aa","bb","cc"]; 

julia> y = ["dd","ee","ff"]; 

julia> z = ["gg","hh","ii"]; 

julia> map(join,zip(x,y,z)) 
3-element Array{Any,1}: 
"aaddgg" 
"bbeehh" 
"ccffii" 

ben hiç join kullanmak sanmıyorum