indexing - 设置索引!没有为 WeakRefStrings 定义。 SpringArray{字符串,1}

标签 indexing set julia

我想在 IJulia 的列上创建一个循环,但出现了这个错误。请问我该怎么做才能纠正它。

这是我的代码:

for v=1:length(col1)
    col1[v] = Dates.DateTime(col1[v], "d-u-y")
end

我得到了这个错误:

setindex! not defined for WeakRefStrings.StringArray{String,1}

Stacktrace:
 [1] error(::String, ::Type{T} where T) at .\error.jl:42
 [2] error_if_canonical_setindex(::IndexLinear, ::WeakRefStrings.StringArray{String,1}, ::Int64) at .\abstractarray.jl:1081
 [3] setindex!(::WeakRefStrings.StringArray{String,1}, ::DateTime, ::Int64) at .\abstractarray.jl:1072
 [4] top-level scope at .\In[130]:2

我决定尝试使用以下方法稍微更改代码:

for i in col1
       global col1[i] = Dates.DateTime(string.(col1[i]), "d-u-y")
end

然后我仍然遇到这个错误:

ArgumentError: invalid index: "4-Jul-2014" of type String

Stacktrace:
 [1] to_index(::String) at .\indices.jl:297
 [2] to_index(::WeakRefStrings.StringArray{String,1}, ::String) at .\indices.jl:274
 [3] to_indices at .\indices.jl:325 [inlined]
 [4] to_indices at .\indices.jl:322 [inlined]
 [5] getindex(::WeakRefStrings.StringArray{String,1}, ::String) at .\abstractarray.jl:980
 [6] top-level scope at .\In[136]:2

最佳答案

这里有两个不同的问题。第一个问题是您可能使用 CSV.read() 读取一些数据。 ,它为您提供了一组不可变的列。由于它们是不可变的,setindex! (本质上改变内容)是不允许的。关于此的问题已得到解答here .

第二个问题不相关,是由于您现在正在迭代实际列 col1 ,这样 i不再是整数,而是取 col1 中的值,在你的情况下是 WeakRefString 。所以当你这样做 col1[i] , i值为 "4-Jul-2014" ,因为这是 col1 中的第一个值柱子。

无论如何,您根本不需要在这里循环,而可以简单地依赖 Julia 的广播语法,如下所示:

Date.(col1, DateFormat("d-u-y"))

Date后面的点广播Date col1 的每个元素的构造函数。另请注意,您可以只使用 Date而不是DateTime根据错误消息中显示的日期,您的数据似乎没有附加时间。

关于indexing - 设置索引!没有为 WeakRefStrings 定义。 SpringArray{字符串,1},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62372522/

相关文章:

hibernate - 让 Hibernate 生成外键索引

mysql - ServiceStack.OrmLite : Can custom naming of index be done in code?

mysql - 文档词索引数据库结构?

julia - 如何计算Julia中两条线(2坐标点的序列)之间的距离

hadoop - 什么是适合我索引和处理大数据的工具?

java - 克隆和减法集 - 这行得通吗?

python - 获取嵌套字典中唯一值的列表(或集合)

python - 什么是 Python 的良好磁盘 "set"实现?

julia - 在 julia 中创建用户类型的 View

c++ - Julia 调用窗口