In version 1.4.1, fcaR introduces comprehensive support
for JSON (JavaScript Object Notation) export and
import. This facilitates interoperability with other systems, web
applications, and non-R based tools.
This vignette demonstrates how to export and import the main data
structures in fcaR: FormalContext,
ConceptLattice, ImplicationSet, and
RuleSet.
First, ensure you have the jsonlite package installed,
as it is required for these features.
We can export a FormalContext to JSON, which preserves
the objects, attributes, and the incidence matrix. Importantly, the
incidence matrix is exported in a sparse format (indices and values) to
handle large datasets efficiently.
Let’s load a sample dataset and create a
FormalContext.
data("planets")
fc <- FormalContext$new(planets)
print(fc)
#> FormalContext with 9 objects and 7 attributes.
#> small medium large near far moon no_moon
#> Mercury X X X
#> Venus X X X
#> Earth X X X
#> Mars X X X
#> Jupiter X X X
#> Saturn X X X
#> Uranus X X X
#> Neptune X X X
#> Pluto X X XTo export the context to a JSON string:
json_str <- fc$to_json()
cat(substr(json_str, 1, 200), "...") # Print first 200 chars
#> {"type":"FormalContext","objects":["Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus","Neptune","Pluto"],"attributes":["small","medium","large","near","far","moon","no_moon"],"I":{"indices": ...You can also save it directly to a file:
To verify the export, we can import the JSON string back into a new
FormalContext object using
context_from_json():
fc2 <- context_from_json(json_str)
print(fc2)
#> FormalContext with 9 objects and 7 attributes.
#> small medium large near far moon no_moon
#> Mercury X X X
#> Venus X X X
#> Earth X X X
#> Mars X X X
#> Jupiter X X X
#> Saturn X X X
#> Uranus X X X
#> Neptune X X X
#> Pluto X X XWe can check that the original and reconstructed contexts are identical:
The to_json() method for FormalContext is
recursive. If you have computed concepts or
implications, they will be nested within the exported JSON.
fc$find_concepts()
fc$find_implications()
# Export with nested concepts and implications
json_full <- fc$to_json()
#> 'as(<ngCMatrix>, "dgCMatrix")' is deprecated.
#> Use 'as(., "dMatrix")' instead.
#> See help("Deprecated") and help("Matrix-deprecated").
# Import back
fc_full <- context_from_json(json_full)
# Check if concepts are present
fc_full$concepts$size()
#> [1] 12You can also export a ConceptLattice independently.
And import it using lattice_from_json():
cl2 <- lattice_from_json(json_lattice)
print(cl2)
#> A set of 12 concepts:
#> 1: ({Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto}, {})
#> 2: ({Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto}, {moon})
#> 3: ({Jupiter, Saturn, Uranus, Neptune, Pluto}, {far, moon})
#> 4: ({Jupiter, Saturn}, {large, far, moon})
#> 5: ({Uranus, Neptune}, {medium, far, moon})
#> 6: ({Mercury, Venus, Earth, Mars, Pluto}, {small})
#> 7: ({Earth, Mars, Pluto}, {small, moon})
#> 8: ({Pluto}, {small, far, moon})
#> 9: ({Mercury, Venus, Earth, Mars}, {small, near})
#> 10: ({Mercury, Venus}, {small, near, no_moon})
#> 11: ({Earth, Mars}, {small, near, moon})
#> 12: ({}, {small, medium, large, near, far, moon, no_moon})The exported JSON includes the lattice hierarchy (superconcept/subconcept relations), allowing for full reconstruction of the lattice structure.
Similarly, sets of implications can be exported and imported.
Import using implications_from_json():
imps2 <- implications_from_json(json_imps)
print(imps2)
#> Implication set with 10 implications.
#> Rule 1: {no_moon} -> {small, near}
#> Rule 2: {far} -> {moon}
#> Rule 3: {near} -> {small}
#> Rule 4: {large} -> {far, moon}
#> Rule 5: {medium} -> {far, moon}
#> Rule 6: {medium, large, far, moon} -> {small, near, no_moon}
#> Rule 7: {small, near, moon, no_moon} -> {medium, large, far}
#> Rule 8: {small, near, far, moon} -> {medium, large, no_moon}
#> Rule 9: {small, large, far, moon} -> {medium, near, no_moon}
#> Rule 10: {small, medium, far, moon} -> {large, near, no_moon}Association rules (including causal rules) are also supported.
The new JSON functionality ensures that you can easily move your FCA models out of R for visualization, storage, or integration with web services.
| Class | Export Method | Import Function |
|---|---|---|
FormalContext |
$to_json() |
context_from_json() |
ConceptLattice |
$to_json() |
lattice_from_json() |
ImplicationSet |
$to_json() |
implications_from_json() |
RuleSet |
$to_json() |
rules_from_json() |