我想问一下如何在以下函数中覆盖变量v
和ind
:
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
}
更新v
和ind
的最简单方法是什么?
答案 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
相应地,可以更改其他部分以满足您的需要。