Я полагаю, вам следует подумать о построении структуры данных в виде разреженной матрицы вместо фрейма данных. Это можно сделать, например, с помощью пакета Matrix
.
library(Matrix)
sparse_Matrix_output <- sparseMatrix(i = as.integer(dataframe$Country_a), j = as.integer(dataframe$Country_b), x = dataframe$Year_2000)
colnames(sparse_Matrix_output) = levels(dataframe$Country_b)
rownames(sparse_Matrix_output) = levels(dataframe$Country_a)
А вот и вывод:
sparse_Matrix_output
7 x 7 sparse Matrix of class "dgCMatrix"
Brazil China France Mexico Mongolia New Zealand US
Argentina 30 . . . . . .
Brazil . . 4 . . . .
Cananda . . . . . . 5
China . . . 54 . . .
France . . . . 7 . .
Germany . 4 . . . . .
US . . . . . 67 .
Я нахожу, что существуют веские основания для использования интерфейса вместо конкретного класса в качестве свойства.
Например, если ваш класс Field находился в отдельном проекте от класса Address, и у вас не было зависимости от проекта класса Address от проекта класса Field.
Есть и другие способы справиться с этой ситуацией, но самый простой способ часто заключается в том, чтобы попытаться сделать то, что Вы делаете, и объяснить NHibernate конкретному классу, который Вы хотите использовать для IAddress.
Теперь вы можете сделать это в свободном NHibernate, например так:
References(x => x.Address, "AddressId")
.Class(typeof(Address);
К сожалению, вы не можете сделать это с HasMany или HasManyToMany. Я не уверен, что это вообще возможно из-за отсутствия хорошей ковариационной поддержки в C#.
На Вашем Объекте поля у Вас есть объект типа IAddress. Это могло быть реализовано любым количеством различных реализаций. С каким Вы спрашиваете, каждая реализация имела бы свое собственное отображение, которое представит какое-либо количество трудностей (невозможность?), чтобы NHibernate обработал.
Простой пример помог бы продемонстрировать. Скажите, что у Вас есть две реализации IAddress Address1 и Address2. Каждый из них сохраняется в их собственной таблице, tblAddress1, и tblAddress2. То, когда Вы пытаетесь загрузить свой Объект поля, весь NHibernate знает, - то, что у Вас есть что-то, что реализует IAddress, он не знает, какая реализация была сохранена. Как это знало бы который, отображаясь для использования для получения дочернего объекта для какого-либо данного поля?
Я уверен, что существует больше сложностей, но этот пример показывает, почему у Вас должно быть отображение для точного типа объекта, который Вы объявили.