Функция для возврата набора данных частично на основе глобальной переменной - PullRequest
0 голосов
/ 16 сентября 2018

Я хочу создать функцию, которая выполняет следующие действия: принимает набор данных. Проверьте глобальную переменную x, если она равна 0 или 1. Если x равен 0, то она должна превратиться в x в 1 и вернуть набор данных без первой строки. Еслих равен 1, тогда он должен оставить х и возвращать каждую строку.

Набор данных:

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 7 0.75 12 8 1.25 9 9 1.75 4 10 2.25 2 11 2.25 -3 12 2.75 -6 13 3.25 -14 14 3.75 -14 15 4.25 -17 16 4.75 -19 17 5.25 -12 18 5.75 -9 19 6.25 -4 20 6.75 -2

Функция, которую я теперь имею

testfunc = function(set){ print(x) for(i in 1:nrow(set)){ ifelse(x == 0, x <<- 1, return(set[i])) } }

Это дает в результате вывод x и только строки счетчиков набора данных без пропущенной первой строки.

1 Ответ

0 голосов
/ 16 сентября 2018

Логика вашей функции была немного неправильной.

Прежде всего, вам вообще не нужен 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 является исходным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...