我想創建一個函式,首先,它在 Julia 中過濾資料框的一個元素。其次,它測驗元素是否“丟失”。如果答案是 rue,則回傳值“0.0”。我的問題是控制評估“如果”不起作用,我不知道為什么。但是,如果元素是“String”,則控制元件評估有效,但該元素是 1-element 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
提前感謝您的時間。
uj5u.com熱心網友回復:
你應該寫:
ismissing(only(sireOfrecent))
這句話的意思:
only檢查您是否準確地選擇了一行(如果不是 - 您將收到錯誤,因為存在歧義;如果是 - 您從陣列中提取元素)ismissing是一個函式,您應該使用它來檢查某個值是否為missing.
這里有些例子:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/476691.html
上一篇:帶有運算式的SSRS標簽格式
