Получить адрес памяти фрейма данных R - PullRequest
1 голос
/ 09 января 2020

Я бы хотел, чтобы моя функция C могла манипулировать некоторыми значениями, хранящимися во фрейме данных R.

Для этого необходим (реальный) адрес памяти, где хранится фрейм данных R его данные (надеюсь, непрерывным образом); затем из R я вызываю функцию C и передаю этот адрес памяти в качестве параметра.

Вопрос: как мы можем получить адрес памяти фрейма данных R?

1 Ответ

6 голосов
/ 09 января 2020

R cpp проходит по ссылке. Т.е. он передает указатели на объекты R, а не их значения. Таким образом, вы можете манипулировать ими в C ++ так же, как любой указатель.

пример

library(Rcpp)

cppFunction('
void f1(DataFrame x) {
  IntegerVector V1 = x["V1"];
  V1 = V1 * 2;
  }
')

x = data.frame(V1 = 1:5, V2 = 1:5)
f1(x)
x
#   V1 V2
# 1  2  1
# 2  4  2
# 3  6  3
# 4  8  4
# 5 10  5
...