Title: | C++ Standard Library Vectors in R |
---|---|
Description: | Allows the creation and manipulation of C++ std::vector's in R. |
Authors: | Marco Giuliano |
Maintainer: | Marco Giuliano <[email protected]> |
License: | GPL (>= 2) |
Version: | 0.0.7 |
Built: | 2025-03-09 02:55:02 UTC |
Source: | https://github.com/digemall/stdvectors |
Allows the creation and manipulation of C++ std::vector's in R.
Package: | stdvectors |
Type: | Package |
Version: | 0.0.7 |
Date: | 2017-02-20 |
License: | GPL (>= 2) |
This package allows the creation and manipulation of C++ std::vector's in R. std::vector's are dynamically allocated arrays, which are especially helpful when you need to fill a huge vector (e.g. in a loop) but you don't know the size in advance.
Marco Giuliano
Maintainer: Marco Giuliano <[email protected]>
cpp reference page : http://en.cppreference.com/w/
# create a stdvector sv <- stdvectorCreate('integer') # add 100 values to it for(i in 1:100){ # note that sv is modified in-place stdvectorPushBack(sv,i) } # get a normal R vector from the stdvector v <- stdvectorToVector(sv) ## Not run: # check the time difference: # the first method takes around 2-3 s # the second method takes less than 0.1 s system.time({ v <- integer() for(i in 1:100000){ v[[length(v)+1]] <- i } } ) system.time({ v <- stdvectorCreate('integer') for(i in 1:100000){ stdvectorPushBack(v,i) } } ) ## End(Not run)
# create a stdvector sv <- stdvectorCreate('integer') # add 100 values to it for(i in 1:100){ # note that sv is modified in-place stdvectorPushBack(sv,i) } # get a normal R vector from the stdvector v <- stdvectorToVector(sv) ## Not run: # check the time difference: # the first method takes around 2-3 s # the second method takes less than 0.1 s system.time({ v <- integer() for(i in 1:100000){ v[[length(v)+1]] <- i } } ) system.time({ v <- stdvectorCreate('integer') for(i in 1:100000){ stdvectorPushBack(v,i) } } ) ## End(Not run)
Create and manipulate a C++ std:::vector in R.
stdvectorCreate(type = "double", reserve = 0L) stdvectorPushBack(sdv, values) stdvectorSize(sdv) stdvectorClear(sdv) stdvectorToVector(sdv) stdvectorSubset(sdv,indexes) stdvectorReplace(sdv,indexes,values) stdvectorErase(sdv,indexFrom,indexTo) stdvectorClone(sdv) is.stdvector(x) ## S3 method for class 'stdvector' print(x, ...) ## S3 method for class 'stdvector' toString(x, ...)
stdvectorCreate(type = "double", reserve = 0L) stdvectorPushBack(sdv, values) stdvectorSize(sdv) stdvectorClear(sdv) stdvectorToVector(sdv) stdvectorSubset(sdv,indexes) stdvectorReplace(sdv,indexes,values) stdvectorErase(sdv,indexFrom,indexTo) stdvectorClone(sdv) is.stdvector(x) ## S3 method for class 'stdvector' print(x, ...) ## S3 method for class 'stdvector' toString(x, ...)
type |
Character string indicating the type of the vector; possible values: |
reserve |
The number of slots to be pre-allocated in the stdvector. |
sdv |
A stdvector object, as returned by |
... |
optional arguments passed to inner |
x |
A stdvector object, as returned by |
values |
Values to be appended (in |
indexes |
Indexes used to subset the current stdvector, in case of out of bounds indexes an error will be raised. |
indexFrom |
Used by |
indexTo |
Used by |
stdvectorCreate
creates a stdvector object of the indicated type.
stdvectorPushBack
appends elements to an existing stdvector (see note for type='any'
).
stdvectorSize
returns the number of elements of an existing stdvector.
stdvectorClear
removes all the elements of an existing stdvector.
stdvectorToVector
turns an existing stdvector into an R vector of the type chosen when the stdvector has been created.
stdvectorSubset
subsets an existing stdvector returning an R vector with the values corresponding to the selected indexes.
stdvectorReplace
replace the elements at indexes
positions with the values in values
argument (see note for type='any'
).
stdvectorErase
remove the elements from indexFrom
to indexTo
positions.
stdvectorClone
create a deep copy of the stdvector object.
stdvectorCreate
returns an object of class stdvector
.
stdvectorPushBack
return NULL
invisibly.
stdvectorSize
returns an integer equal to the size of the stdvector
.
stdvectorClear
returns NULL
invisibly.
stdvectorToVector
returns an R vector of the type chosen when the stdvector
has been created (type='any'
will return a list).
stdvectorSubset
returns an R vector (of the type chosen when the stdvector
has been created, type='any'
will return a list) with the values corresponding to the selected indexes.
stdvectorReplace
returns NULL
invisibly.
stdvectorErase
returns NULL
invisibly.
stdvectorClone
returns an object of class stdvector
which is the copy of the passed object.
stdvector
stdvector objects are treated as references, so if you do sv2 <- sv1
and then you modify sv2
actually also sv1
will be modified. You need to do sv2 <- stdvectorClone(sv1)
to actually create a copy.
stdvectorPushBack
in case of stdvector of type='any'
will append the element passed in the argument values
as a single new element of the vector, even if it's a list.
stdvectorSubset
indexes must be between 1 and the size of the stdvector.
stdvectorReplace
indexes
and values
must have the same length. In case of stdvector of type='any'
will accept only indexes
of length one.
See http://en.cppreference.com/w/cpp/container/vector
# create a stdvector sv <- stdvectorCreate('integer') # add 100 values to it for(i in 1:100){ # note that sv is modified in-place stdvectorPushBack(sv,i) } # get a normal R vector from the stdvector v <- stdvectorToVector(sv)
# create a stdvector sv <- stdvectorCreate('integer') # add 100 values to it for(i in 1:100){ # note that sv is modified in-place stdvectorPushBack(sv,i) } # get a normal R vector from the stdvector v <- stdvectorToVector(sv)