Если вы хотите, чтобы вернуть значение параметра, установленного внутри функции, вы можете использовать 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
Обратите внимание, что вы не должны изменять значение параметра ter внутри функции, вместо этого вы скопируете ее в новую переменную, сделайте то, что хотите сделать в своем коде, и, наконец, установите значение новой переменной в свою переменную параметра, как это происходит внутри функции.
Для собственной функции, это то, что вам нужно сделать для вашего первого 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
Соответственно, другая часть может быть изменена в соответствии с тем, что вы хотите.
1) Что вы _really_ пытаетесь сделать? 2) 'i + 1: k' анализирует как' i + (1: k) '; вы, вероятно, имели в виду '(i + 1): k'. –
Спасибо. Это очень простая реализация цикла for. Поскольку единственная реалистическая интерпретация i + 1: k равна (i + 1): k, поэтому я не понимаю, почему она была написана авторами. – TobiR
Вы не ответили на вопрос. Что вы пытаетесь сделать? –