]> gerrit.simantics Code Review - simantics/r.git/blob - bundles/org.simantics.r.scl/scl/R/RExp.scl
Restructured R repository for Tycho POMless builds.
[simantics/r.git] / bundles / org.simantics.r.scl / scl / R / RExp.scl
1 import "Vector"\r
2 \r
3 @JavaType "org.rosuda.REngine.REXP"\r
4 data RExp = \r
5     @JavaType "org.rosuda.REngine.REXPDouble"\r
6     @FieldNames [payload]\r
7     RExpDouble (Vector Double)\r
8   | @JavaType "org.rosuda.REngine.REXPInteger"\r
9     @FieldNames [payload]\r
10     RExpInteger (Vector Integer)\r
11   | @JavaType "org.rosuda.REngine.REXPString"\r
12     @FieldNames [payload]\r
13     RExpString (Vector String)\r
14   | @JavaType "org.rosuda.REngine.REXPGenericVector"\r
15     @FieldNames [payload]\r
16     RExpGenericVector (Vector RExp)\r
17   | @JavaType "org.rosuda.REngine.REXPNull"\r
18     RExpNull\r
19 \r
20 instance Show RExp where\r
21     sb <+ RExpDouble v = do \r
22         for [0..length v-1] $ \i ->\r
23             ignore $ (if i > 0 then sb << " " else sb) <+ v!i\r
24         sb\r
25     sb <+ RExpInteger v = do \r
26         for [0..length v-1] $ \i ->\r
27             ignore $ (if i > 0 then sb << " " else sb) <+ v!i\r
28         sb   \r
29     sb <+ RExpGenericVector v = do \r
30         for [0..length v-1] $ \i ->\r
31             ignore $ (if i > 0 then sb << " " else sb) <+ v!i\r
32         sb               \r
33     sb <+ RExpNull = sb << "NULL"\r
34     sb <+ _ = sb << "unknown"\r
35     \r
36 importJava "org.rosuda.REngine.REXP" where\r
37     @JavaName dim\r
38     dimR :: RExp -> Maybe (Vector Integer)\r
39     \r
40     @JavaName getAttribute\r
41     attributeRExp :: RExp -> String -> Maybe RExp \r
42 \r
43     @JavaName inherits\r
44     inherits :: RExp -> String -> Boolean\r
45     \r
46     @private\r
47     @JavaName asDouble\r
48     convertRExpToDouble :: RExp -> Double\r
49     \r
50     @private\r
51     @JavaName asDoubles\r
52     convertRExpToVectorDouble :: RExp -> Vector Double\r
53 \r
54     @private\r
55     @JavaName asInteger\r
56     convertRExpToInteger :: RExp -> Integer\r
57     \r
58     @private\r
59     @JavaName asIntegers\r
60     convertRExpToVectorInteger :: RExp -> Vector Integer\r
61 \r
62     @private\r
63     @JavaName asString\r
64     convertRExpToString :: RExp -> String\r
65     \r
66     @private\r
67     @JavaName asStrings\r
68     convertRExpToVectorString :: RExp -> Vector String\r
69     \r
70     @private\r
71     @JavaName createDoubleMatrix\r
72     convertDoubleMatrixToRExp :: Vector (Vector Double) -> RExp \r
73 \r
74     @private\r
75     @JavaName asDoubleMatrix\r
76     convertRExpToDoubleMatrix :: RExp -> Vector (Vector Double) \r
77         \r
78     @private\r
79     @JavaName asList\r
80     convertRExpToList :: RExp -> [RExp]\r
81 \r
82 attributeR :: RCompatible a => RExp -> String -> Maybe a\r
83 attributeR exp = map fromRExp . attributeRExp exp \r
84     \r
85 @private\r
86 importJava "org.rosuda.REngine.REXPDouble" where\r
87     @JavaName "<init>"\r
88     convertDoubleToRExp :: Double -> RExp\r
89     \r
90     @JavaName "<init>"\r
91     convertVectorDoubleToRExp :: Vector Double -> RExp\r
92 \r
93 @private\r
94 importJava "org.rosuda.REngine.REXPInteger" where\r
95     @JavaName "<init>"\r
96     convertIntegerToRExp :: Integer -> RExp\r
97     \r
98     @JavaName "<init>"\r
99     convertVectorIntegerToRExp :: Vector Integer -> RExp\r
100 \r
101 @private\r
102 importJava "org.rosuda.REngine.REXPString" where\r
103     @JavaName "<init>"\r
104     convertStringToRExp :: String -> RExp\r
105     \r
106     @JavaName "<init>"\r
107     convertVectorStringToRExp :: Vector String -> RExp\r
108 \r
109 @private\r
110 importJava "org.rosuda.REngine.REXPGenericVector" where\r
111     @JavaName "<init>"\r
112     convertRListToRExp :: RList -> RExp\r
113 \r
114 @private\r
115 importJava "org.rosuda.REngine.RList" where\r
116     data RList\r
117 \r
118     @JavaName "<init>"\r
119     createRList :: [RExp] -> RList\r
120 \r
121 class RCompatible a where\r
122     fromRExp :: RExp -> a\r
123     toRExp :: a -> RExp\r
124 \r
125 instance RCompatible RExp where\r
126     fromRExp = id\r
127     toRExp = id\r
128 \r
129 instance RCompatible Double where\r
130     fromRExp = convertRExpToDouble\r
131     toRExp = convertDoubleToRExp\r
132 \r
133 instance RCompatible (Vector Double) where\r
134     fromRExp = convertRExpToVectorDouble\r
135     toRExp = convertVectorDoubleToRExp\r
136 \r
137 instance RCompatible Integer where\r
138     fromRExp = convertRExpToInteger\r
139     toRExp = convertIntegerToRExp\r
140 \r
141 instance RCompatible (Vector Integer) where\r
142     fromRExp = convertRExpToVectorInteger\r
143     toRExp = convertVectorIntegerToRExp\r
144 \r
145 instance RCompatible String where\r
146     fromRExp = convertRExpToString\r
147     toRExp = convertStringToRExp\r
148 \r
149 instance RCompatible (Vector String) where\r
150     fromRExp = convertRExpToVectorString\r
151     toRExp = convertVectorStringToRExp\r
152 \r
153 instance RCompatible (Vector (Vector Double)) where\r
154     fromRExp = convertRExpToDoubleMatrix\r
155     toRExp = convertDoubleMatrixToRExp\r
156 \r
157 instance (RCompatible a) => RCompatible [a] where\r
158     fromRExp = map fromRExp . convertRExpToList\r
159     toRExp = convertRListToRExp . createRList . map toRExp