【发布时间】:2021-09-11 03:59:17
【问题描述】:
我想根据 DataFrame 中 id 列的值使用宏来改变一组可变结构中的一个,其中 id 列与结构的名称匹配。 我有一个返回从 MySQL 表创建的数据框的函数:
function groups()
log = DBInterface.execute(con, "SELECT * FROM pgdb1.groups")
df = DataFrame(log)
return df
end
这是数据框,它有 2 列,id 和 pop:
2×2 DataFrame
Row │ id pop
│ String String
─────┼───────────────────
1 │ yg_1 6
2 │ jyg_1 4
我有 2 个结构,它们与这些 id 匹配,我想根据数据框的行更新它们:
mutable struct jyg_1
pop::Int
end
mutable struct yg_1
pop::Int
end
我有一个获取数据框的宏。基于该行的 id,我希望它更新与该行的 id 具有相同名称的结构。下面是一些伪代码,可以让您了解我的想法,但可能有更好的方法。
macro filter()
for row ∈ eachrow(groups())
# if row.id == [ some element in a list of stringified structs ]
# update the jyg_1 or yg_1 struct with group.pop
# DBInterface.execute(con, "INSERT INTO pgdb1.groups (pop) VALUES ('$pop' );")
# end
end
end
我不确定是否有人可以推动我朝着正确的方向前进。感谢您考虑这个问题!
【问题讨论】:
-
我不明白你为什么需要一个宏。您可以获得对象结构的名称为
string(typeof(obj))。将此名称与数据框的id字段进行比较后,您可以使用普通语法obj.pop = new_value设置值。 -
你会如何进行比较?
-
如果你想更新结构,我假设你在某个集合中有这些结构的实例。这是对的吗?如果是这样,您可以遍历该集合并应用
string(typeof(obj)) == row.id。
标签: julia