Julia调用mymain函数传入已读取数据集报MethodError是函数还是数据集问题?
问题根因与解决方案
错误原因
mymain 函数设计的第一个入参是存储数据集的文件名字符串,内部已经自带了 readdlm 读取文件的逻辑。你提前手动调用 readdlm 把文件读取成了 Array{Float64,2} 类型的 info 数组,再把这个数组传入 mymain,就会导致函数内部的 readdlm 接收到不支持的数组类输入,触发类型匹配报错。
两种解决方案
- 方案1(无需修改函数代码,最便捷):删除你提前读取文件的
info = readdlm("DataSet.txt")代码,直接调用函数即可:mymain("DataSet.txt",5) - 方案2(需要提前处理数据集再传入):修改
mymain函数的代码,适配数组类型入参:- 把函数定义行改为
function mymain(M,nsamples) - 删除函数内部第一行的
M=readdlm(filename)代码 - 之后就可以正常传入你提前读取的数组:
mymain(info,5)
- 把函数定义行改为
额外注意事项
你贴的函数代码使用的是Julia 0.6及更老版本的语法,其中 ASCIIString、linspace、hist 等API在当前1.x系列Julia版本中已经被废弃,解决当前报错后如果仍然运行失败,需要对应调整为新版本语法:
Array(ASCIIString,1,nparams)替换为fill("",1,nparams)或者Vector{String}(undef, nparams)linspace(a,b,n)替换为range(a, b, length=n)- 直方图计算需要导入StatsBase包,调用
fit(Histogram, A[:], bx)实现
内容的提问来源于stack exchange,提问作者Andrés CM
相关产品推荐
相关产品推荐

