Beispiel #1
0
 def do_slot_assign(self, name: str, value) -> None:
     _rinterface._assert_valid_slotname(name)
     cchar = conversion._str_to_cchar(name)
     with memorymanagement.rmemory() as rmemory:
         name_r = rmemory.protect(openrlib.rlib.Rf_install(cchar))
         cdata = rmemory.protect(conversion._get_cdata(value))
         openrlib.rlib.R_do_slot_assign(self.__sexp__._cdata, name_r, cdata)
def build_rcall(rfunction, args=[], kwargs=[]):
    rlib = openrlib.rlib
    with memorymanagement.rmemory() as rmemory:
        rcall = rmemory.protect(rlib.Rf_allocList(len(args) + len(kwargs) + 1))
        _SET_TYPEOF(rcall, rlib.LANGSXP)
        rlib.SETCAR(rcall, rfunction)
        item = rlib.CDR(rcall)
        for val in args:
            cdata = rmemory.protect(conversion._get_cdata(val))
            rlib.SETCAR(item, cdata)
            item = rlib.CDR(item)
        for key, val in kwargs:
            if key is not None:
                _assert_valid_slotname(key)
                rlib.SET_TAG(item,
                             rlib.Rf_install(conversion._str_to_cchar(key)))
            cdata = rmemory.protect(conversion._get_cdata(val))
            rlib.SETCAR(item, cdata)
            item = rlib.CDR(item)
    return rcall
Beispiel #3
0
 def __setitem__(self, key: str, value) -> None:
     # TODO: move body to _rinterface-level function
     if not (isinstance(key, str) and len(key)):
         raise ValueError('The key must be a non-empty string.')
     if (self.__sexp__._cdata == openrlib.rlib.R_BaseEnv) or \
        (self.__sexp__._cdata == openrlib.rlib.R_EmptyEnv):
         raise ValueError('Cannot remove variables from the base or '
                          'empty environments.')
     # TODO: call to Rf_duplicate needed ?
     with memorymanagement.rmemory() as rmemory:
         symbol = rmemory.protect(
             openrlib.rlib.Rf_install(conversion._str_to_cchar(key)))
         cdata = rmemory.protect(conversion._get_cdata(value))
         cdata_copy = rmemory.protect(openrlib.rlib.Rf_duplicate(cdata))
         openrlib.rlib.Rf_defineVar(symbol, cdata_copy,
                                    self.__sexp__._cdata)