Могу ли я поменять переменные внутри функции, используя указатели на R? - PullRequest
0 голосов
/ 01 мая 2018

Вот глупый (возможно, только в моих мыслях) способ достичь моей цели:

A <- "This is a test."
B <- "This is the answer."
swap <- function(item1,item2) {
  tmp   <- item2
  item2 <- item1
  item1 <- tmp
  return(list(item1,item2))
}
AB <- swap(A,B)
A <- AB[[1]]
B <- AB[[2]]

Но я рассматриваю нечто похожее на следующий код C:

void swap(int *a, int *b)
{
    int iTemp ;
    iTemp = *a;
    *a = *b;
    *b = iTemp;

}

Мои мотивы:

  • Мои реальные данные достаточно велики, например, Матрица 5k * 5k, поэтому присвоение существующей переменной в итерации дважды, внутри функции и вне функции, должно быть расточительством.
  • Ближайший вопрос к SO - , этот , но, как и ОП в вопросе, моя R-сессия также имеет много объектов: я работаю с Rmpi, и каждый раб будет имеют большое количество переменных.
  • По моему скромному мнению, R написано в C, поэтому R может иметь указатели, как C, хотя я не могу найти много в сети удивительно.

1 Ответ

0 голосов
/ 01 мая 2018

Как насчет этого; это просто присваивает родительскую среду.

A <- "This is a test."
B <- "This is the answer."

swap <- function(item1, item2) {
  tmp <- item1
  assign(deparse(substitute(item1)), item2, pos = 1)
  assign(deparse(substitute(item2)), tmp, pos = 1)
}

swap(A, B)
A
#[1] "This is the answer."
B
#[1] "This is a test.
...