Другие два варианта:
Базовый пакет:
df <- unstack(dat1, form = value ~ numbers)
rownames(df) <- unique(dat1$name)
df
sqldf
package:
library(sqldf)
sqldf('SELECT name,
MAX(CASE WHEN numbers = 1 THEN value ELSE NULL END) x1,
MAX(CASE WHEN numbers = 2 THEN value ELSE NULL END) x2,
MAX(CASE WHEN numbers = 3 THEN value ELSE NULL END) x3,
MAX(CASE WHEN numbers = 4 THEN value ELSE NULL END) x4
FROM dat1
GROUP BY name')
_Genome[ii]
содержит список, который содержит набор, по меньшей мере, на Neuron
экземпляре. Упрощенно, вы можете сделать это так:
>>> a = [{Neuron()} for _ in [1,2]]
>>> a
[{<__main__.Neuron object at 0x0000000002CAFF28>}, {<__main__.Neuron object at 0x0000000002CAFF60>}]
>>> q = [a]
>>> q
[[{<__main__.Neuron object at 0x0000000002CAFF28>}, {<__main__.Neuron object at 0x0000000002CAFF60>}]]
>>>
Если вы напечатаете _Genome
, это будет выглядеть примерно так - я предполагаю, что _Genome
это как список | q
выше должно быть аналогично _Genome
.
Индексирование в него выглядит следующим образом
>>> q[0]
[{<__main__.Neuron object at 0x0000000002CAFF28>}, {<__main__.Neuron object at 0x0000000002CAFF60>}]
>>> type(q[0])
<class 'list'>
>>> q[0][0]
{<__main__.Neuron object at 0x0000000002CAFF28>}
>>> type(q[0][0])
<class 'set'>
>>>
Поведение множества хорошо документировано - как и большинство Python.
Один из способов доступа к содержимому набора - цикл for
>>> for thing in q[0][0]:
print(thing.x)
50
>>>
Другой способ доступа к содержимому набора - метод pop()
, но при этом удаляется . произвольный предмет из множества. Я не думаю, что вы действительно этого хотите - вы не можете контролировать, какой предмет вы получаете, если их более одного, а в оригинальном наборе на один предмет меньше.
>>> x = [[{Neuron()},{Neuron}]]
>>> t = x[0][0].pop()
>>> t
<__main__.Neuron object at 0x0000000002C2F2E8>
>>> t.x
50
>>> x
[[set(), {<class '__main__.Neuron'>}]]
>>>
Вы также можете составить список из набора и использовать индексы для доступа к содержимому списка.
>>> q
[[{<__main__.Neuron object at 0x0000000002CAFF28>}, {<__main__.Neuron object at 0x0000000002CAFF60>}]]
>>> z = list(q[0][0])
>>> z
[<__main__.Neuron object at 0x0000000002CAFF28>]
>>> z[0].x
50
>>>
Все это кажется слишком сложным, и вам, вероятно, будет лучше изменить способ хранения экземпляров Neuron
. Я понятия не имею, возможно ли это для вас. Просто обойтись без набора, содержащего один экземпляр:
>>> a = [Neuron() for _ in [1,2]]
>>> a
[<__main__.Neuron object at 0x0000000002C2FDD8>, <__main__.Neuron object at 0x0000000002CD00B8>]
>>> q = [a]
>>> q[0][0]
<__main__.Neuron object at 0x0000000002C2FDD8>
>>> type(q[0][0])
<class '__main__.Neuron'>
>>> q[0][0].x
50
>>>