Julia:拆分子字符串仅允许选择输出的第一个条目

问题描述 投票:0回答:1

我开始学习 Julia,我发现

split()
函数有一种奇怪的行为,我不知道如何解决。我正在编写一个脚本来重新格式化 PCA 的输出,并且包含 ID 的第一列压缩了几个字段(大陆、品种和 ID 号)。因此,脚本的第一步是迭代 DataFrame 的这一列,将每个条目拆分两次,并将每个位保存在相应的向量上,以便稍后将它们作为新列添加到数据帧中。问题是,当我尝试这样做时,第一个分割工作正常,但第二个分割只允许我访问第一个条目(
breed[1]
),但如果我尝试获取第二个条目(
breed[2]
),它会失败消息“错误:BoundsError:尝试访问索引 [2] 处的 1 元素 Vector{SubString{String}}”。但是,当我打印该拆分的输出时,它里面有 2 个项目
SubString{String}["Wild", "Urial"]

循环看起来像这样:

for i in ids
   newbreed, newid= split(i,":")
   pop, breed= split(newbreed,"-")
   append!(newids,newid)
   append!(newbreeds,breed)
   append!(newpops,pop)
end

示例数据可以是:

Europe-Suffolk:Suff123
Asia-Altai:ALY453
Africa-Mbororo:123512

知道是什么导致了这个问题吗?

string split julia
1个回答
0
投票

问题在于使用

append!
,因为本例中的
SubString{String}
具有
Char
的元素,例如

one = []
two = []

for i in ids
  one, two = split(i, ":")
end

看看例如

two

collect(two)
6-element Vector{Char}:
 '1': ASCII/Unicode U+0031 (category Nd: Number, decimal digit)
 '2': ASCII/Unicode U+0032 (category Nd: Number, decimal digit)
 '3': ASCII/Unicode U+0033 (category Nd: Number, decimal digit)
 '5': ASCII/Unicode U+0035 (category Nd: Number, decimal digit)
 '1': ASCII/Unicode U+0031 (category Nd: Number, decimal digit)
 '2': ASCII/Unicode U+0032 (category Nd: Number, decimal digit)

append!
尝试添加每个元素。

来自

help?> append!

...将每个 collectionselements 添加到其末尾。

在本例中是单个字符。

一种解决方案是使用

push!
,来自
help?> push!

集合中插入一个或多个项目

将添加

Char
的整个集合,例如

newids = Vector{String}()
newbreeds = Vector{String}()
newpops = Vector{String}()

for i in ids
  newbreed, newid = split(i, ":")
  pop, breed = split(newbreed, "-")
  push!(newids, newid)
  push!(newbreeds, breed)
  push!(newpops, pop)
end

newids
3-element Vector{String}:
 "Suff123"
 "ALY453"
 "123512"
© www.soinside.com 2019 - 2024. All rights reserved.