ошибка mapply: length.out должно быть неотрицательным числом - PullRequest
0 голосов
/ 19 июня 2020

Я создал следующую простую функцию:

fillampenv <- function(samples, samprate, rise, fall){
  # Create output vector
  v <- vector("numeric", samples)
  # Fill output vector
  v <- c(seq(0, 1, length = rise * samprate),
         seq(1, 1, length = (((samples/samprate) -
                                (rise + fall)) * samprate) -1),
         seq(1, 0, length = fall * samprate))
  return(v)
}

Которую я хотел бы вызвать для каждой строки фрейма данных:

df <- structure(list(samples = c(17640, 17640, 17640, 17640, 17640), samprate = c(44100, 44100, 44100, 44100, 44100), rise = c(0.75, 0.75, 0.75, 0.75, 0.75), fall = c(0.3, 0.3, 0.3, 0.3, 0.3)), class = "data.frame", row.names = c(NA, -5L))

Однако, когда я попытался сделайте это, используя следующее (которое работает для меня с другими функциями, которые я сделал):

ampenvs <- mapply(fillampenv,
                  samples = df$samples,
                  samprate = df$samprate,
                  rise = df$rise,
                  fall = df$fall)

Я получаю сообщение об ошибке:

Error in seq.default(1, 1, length = (((samples/samprate) - (rise + fall)) *  : 
  'length.out' must be a non-negative number

Есть идеи, почему? Я изо всех сил пытаюсь понять, почему он не работает, в частности, с этой функцией (в то время как другие работают нормально).

1 Ответ

3 голосов
/ 19 июня 2020

Ваша функция приводит к отрицательному параметру length.out, переданному в seq. Например,

> df %>% mutate(x = (((samples/samprate) -
+                       (rise + fall)) * samprate) -1)
  samples samprate rise fall      x
1   17640    44100 0.75  0.3 -28666
2   17640    44100 0.75  0.3 -28666
3   17640    44100 0.75  0.3 -28666
4   17640    44100 0.75  0.3 -28666
5   17640    44100 0.75  0.3 -28666
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...