Julia相当于R&#39的paste()函数

时间:2016-03-30 20:26:53

标签: julia

朱莉娅的功能是否与R paste()功能相似?特别是,如果我们给函数赋予两个向量,它将返回一个带有两个输入向量的逐元连接的向量。

我环顾四周,似乎无法在文档或其他方面找到答案。 John Myles White的An older post表明Julia的join()函数是最接近的模拟函数,但它似乎仅对字符串对有效,而不是对字符串向量进行元素处理。

现在,我只是使用下面的函数来循环调用join()的元素,但我想知道是否有更好的方法。

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()会根据需要为我们提供输出。

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

有没有好的选择?我误解了join()功能吗?

3 个答案:

答案 0 :(得分:9)

我认为我根本不会使用join。 Join用于在一个集合中组合字符串;在两个不同集合中串联字符串之后。因此,虽然使用join创建zip所需的临时集合非常简单(且高效),但您可以使用string函数或乘法来避免它:

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"

更好(但可能太聪明了一半),广播元素乘法运算符.*

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

答案 1 :(得分:4)

您可以使用列表推导和zip来获取对:

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"

答案 2 :(得分:4)

可以使用

map。单行是map(join,zip(x,y))。如下例所示,它还添加了z

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"

(参见@DSM答案列表理解)