gpt4 book ai didi

function - 为什么 SubString Vector 的一个元素不能被测试为条件评估 if (Julia)?

转载 作者:行者123 更新时间:2023-12-05 04:29:36 26 4
gpt4 key购买 nike

我想创建一个函数,首先,它在 Julia 中过滤数据框的一个元素。其次,它测试元素是否“缺失”。如果答案是否定的,它返回值“0.0”。我的问题是控制评估“if”不起作用,我不知道为什么。如果元素是“String”,则控件评估有效,但是,元素是 1 元素 Vector{SubString{String}}:过滤后;因此,控制评估不起作用。我想知道为什么并且可以将向量元素转换为字符串对象。注意:"isequal", '==', '===' 也不起作用。

例如:

example_ped = DataFrame(animal = collect(1:1:11),
sire = [fill(0,5); fill(4,3); fill(5,3)],
dam = [fill(0,4); fill(2,4); fill(3,3)])
CSV.write("ped_example.txt",example_ped, header=true,delim='\t')
pedi = CSV.read("ped_example.txt",delim = '\t', header=true, missingstrings=["0"], DataFrame)
pedi[!,1]=strip.(string.(pedi[!,1]))
pedi[!,2]=strip.(string.(pedi[!,2]))
pedi[!,3]=strip.(string.(pedi[!,3]))

部分功能

function computAddRel!(ped,animal_1,animal_2)
elder,recent = animal_1 < animal_2 ? (animal_1,animal_2) : (animal_2,animal_1)
sireOfrecent = ped.sire[ped.animal.==recent]
damOfrecent = ped[ped.animal.==recent,"dam"]
if elder==recent
f_inbreed = (sireOfrecent=="missing" || damOfrecent=="missing") ? 0.0 : 0.5*computAddRel!(ped,sireOfrecent,damOfrecent)
adiv = 1.0 + f_inbreed
return adiv
end
end

如果animal_1和animal_2等于5

julia>     sireOfrecent = pedi.sire[pedi.animal.==recent]
1-element Vector{Union{Missing, Int64}}:
missing

然而,对照评价是错误的

julia> sireOfrecent=="missing"
false
julia> isequal(sireOfrecent,"missing")
false

预先感谢您的宝贵时间。

最佳答案

你应该写:

ismissing(only(sireOfrecent))

这句话的意思:

  • only 检查您是否恰好选择了一行(如果没有 - 您会得到一个错误,因为那样会产生歧义;如果是 - 您从数组中提取元素)
  • ismissing 是一个函数,您应该使用它来检查某些值是否缺失

这里有一些例子:

julia> x = [missing]
1-element Vector{Missing}:
missing

julia> only(x)
missing

julia> ismissing(only(x))
true

julia> only([1, 2])
ERROR: ArgumentError: Collection has multiple elements, must contain exactly 1 element

julia> ismissing(only([1]))
false

关于function - 为什么 SubString Vector 的一个元素不能被测试为条件评估 if (Julia)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72270452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com