我可以使用R中的指针交换函数内的变量吗?

时间:2018-05-01 05:41:49

标签: r function pointers parameter-passing pass-by-reference

这是实现目标的愚蠢(也许只是在我的脑海里):

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的最近问题是this one,但就像问题中的OP一样,我的R会话也有很多对象:我正在使用Rmpi和每个奴隶会有很多变数。
  • 我谦虚地认为,R是用C写的,所以R可能有像C这样的指针,而我却找不到令人惊讶的是。

1 个答案:

答案 0 :(得分:1)

这个怎么样;这只是分配给父环境。

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.