Логика вашей функции была немного неправильной.
Прежде всего, вам вообще не нужен for
цикл .
Во-вторых, вам не нужен ifelse
для проверки только одногозначение.length(x) == 1
, поэтому вы будете тестировать одно значение x
, и это должно быть сделано с помощью простого if
.
И посмотрите, что делает ifelse
:
ifelse(x == 0, x <<- 1, return(set[i]))
Это читает ", если x
равен нулю, установите x
на 1 в GlobalEnv
остальное вернуть set[i]
".Это явно не то, что вы хотите.
Правильный путь может быть следующим:
testfunc <- function(set){
print(x)
if(x == 0){
x <<- 1
return(set[-1, ])
}else{
return(set)
}
}
Теперь проверьте это, сначала с помощью x == 0
.
x <- 0
res <- testfunc(dat)
x
#[1] 1
head(res)
# mid counts
#2 -1.75 6
#3 -1.25 14
#4 -0.75 14
#5 -0.25 17
#6 0.25 19
#7 0.75 12
Значение x
в глобальной среде изменилось, и возвращенный фрейм данных не имеет первой строки.
Сейчас x == 1
.
res <- testfunc(dat)
x
#[1] 1
head(res)
# mid counts
#1 -2.25 3
#2 -1.75 6
#3 -1.25 14
#4 -0.75 14
#5 -0.25 17
#6 0.25 19
Значение x
не изменилось, и возвращенный df является исходным.