scicloj / clojisr

Clojure speaks statistics - a bridge between Clojure to R
https://scicloj.github.io/clojisr/
Eclipse Public License 2.0
150 stars 10 forks source link

RServe - named list processing is too narrow #18

Closed genmeblog closed 4 years ago

genmeblog commented 4 years ago

Sometimes REXPList is returned by R

(r/r->java (r "formals(mean)"))
;; => #object[org.rosuda.REngine.REXPList 0x2316ca25 "org.rosuda.REngine.REXPList@2316ca25[2]named"]
(.isNamed (.asList (r/r->java (r "formals(mean)"))))
;; => true

I attempted to use the same strategy as REXTGenericVector to create Clojure object, unfortunately REXPList doesn't have named parameter. Options:

  1. (quick and dirty), wrap into REXTGenericVector and process
(org.rosuda.REngine.REXPGenericVector. (.asList (r/r->java (r "formals(mean)"))))
  1. Refactor to operate on RList via keys() and at() functions.
(seq (.keys (.asList (r/r->java (r "formals(mean)")))));; => ("x" "...")

side note: formals() returns list where keys are important, values are empty symbols