如何在R中通过引用传递变量?

时间:2016-10-02 20:10:03

标签: r

我想问一下如何在以下函数中覆盖变量vind

 repcomb <- function(v,n,ind)
{
   k <- length(v)
   if(ind == 0)
   {
      for (i in 1:k) v[i] <- 1
      ind <- 1
      return
   }
   for (i in k:1) 
   {
      if(v[i] != n) 
      {
         for (j in k:i) v[j] <- v[i] + 1
         return
      }
   }
   ind = 0
}

更新vind的最简单方法是什么?

2 个答案:

答案 0 :(得分:1)

这是最简单的方法:

\

答案 1 :(得分:0)

如果要取回函数内参数集的值,可以使用eval.parent(substitute(val<-new_val)),例如:

f_sqr <- function(val){
     new_val <- val^2
     eval.parent(substitute(val<-new_val))
}

如果你打电话:

val <- 5
f_sqr(val)
val
#[1] 25

请记住,您不应该更改函数内部参数的值,而是将其复制到新变量,在代码中执行您想要执行的操作,最后将新变量的值设置为参数变量就像在函数内部一样。

对于您自己的功能,您必须为第一个if

执行此操作
repcomb <- function(v, n, ind)
{
   k <- length(v)
   if (ind == 0)
   {
      new_v <- v
      for (i in 1:k) new_v[i] <- 1
      # ind <- 1
      new_ind <- 1
      eval.parent(substitute(ind<-new_ind))
      eval.parent(substitute(v<-new_v))
   }
}

然后,如果你打电话,你将得到更改:

v <- 1:5
n <- 3
ind <- 0
repcomb(v, n, ind)
v
#[1] 1 1 1 1 1
ind
#[1] 1

相应地,可以更改其他部分以满足您的需要。