首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设置索引!未为WeakRefStrings定义。SpringArray{String,1}

设置索引!未为WeakRefStrings定义。SpringArray{String,1}
EN

Stack Overflow用户
提问于 2020-06-14 20:28:34
回答 1查看 64关注 0票数 2

我想在我的IJulia中的一个列上创建一个循环,于是我想到了这个错误。请问我能做些什么来纠正它。

下面是我的代码:

代码语言:javascript
运行
复制
for v=1:length(col1)
    col1[v] = Dates.DateTime(col1[v], "d-u-y")
end

我得到了这个错误:

代码语言:javascript
运行
复制
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

我决定试着用以下命令修改一下代码:

代码语言:javascript
运行
复制
for i in col1
       global col1[i] = Dates.DateTime(string.(col1[i]), "d-u-y")
end

然后我还是得到了这个错误:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-14 22:46:25

这里有两个独立的问题在起作用。第一个问题是,您可能会使用CSV.read()读入一些数据,它提供了一组不可变的列。因为它们是不可变的,所以不允许使用setindex! (本质上是更改内容)。关于这方面的问题已经在here上得到了回答。

第二个问题是无关的,这是因为您现在正在迭代实际的列col1,因此i不再是一个整数,而是取col1中的任何值,在本例中是WeakRefString。因此,当您执行col1[i]时,i的值为"4-Jul-2014",因为这是col1列中的第一个值。

在任何情况下,您都不需要在这里进行循环,而可以简单地依赖Julia的广播语法,如下所示:

代码语言:javascript
运行
复制
Date.(col1, DateFormat("d-u-y"))

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62372522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档