ошибка передачи в списке, невозможно прочитать переданный аргумент - PullRequest
1 голос
/ 04 марта 2020

Вот рабочий пример

Когда я запускаю следующее:

example <- list()
example[[1]] <-matrix(c(1000000,2000000,2000000,5000000), nrow=4, ncol = 1)
example[[2]] <-matrix(c(1500000,2200000,2200000,5000000, 3500000), nrow=5, ncol = 1)

custom_func=function(X, O_low, O_high, A_low, A_high){
  d_vec = vector(length = 1)
  D_occ = pmin(pmax(X-O_low,0),O_high)
  TOTAL_D = pmin(pmax(sum(D_occ)-A_low,0),A_high)
  d_vec[i]=TOTAL_D
  return(mean(d_vec, na.rm=TRUE))
}

rapply(example, custom_func(O_low=1000000, O_high=3000000, A_low=5000000, A_high=25000000), how='list')

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

 Error in pmax(X - O_low, 0) : 
  argument "X" is missing, with no default 

X должен быть example[[1]] а затем example[[2]], но как мне на самом деле передать это? В конце концов, O_low, O_high, A_low, A_high все будут зацикленными значениями, и размер примера будет варьироваться.

Если я сделаю что-то похожее на приведенное ниже, кажется, что он автоматически обнаруживает, что мне нужно передать ... rapply(example, mean, how='list')

1 Ответ

0 голосов
/ 04 марта 2020

Если мы удалим [i] в d_vec[i], оно должно работать, если мы используем анонимный вызов функции (function(x)) или просто указываем параметры и функцию без использования ()

 custom_func=function(X, O_low, O_high, A_low, A_high){
     d_vec = vector(length = 1)
     D_occ = pmin(pmax(X-O_low,0),O_high)
     TOTAL_D = pmin(pmax(sum(D_occ)-A_low,0),A_high)
     d_vec =TOTAL_D
     return(mean(d_vec, na.rm=TRUE))
   }

Использование анонимной функции (лямбда-функции)

rapply(example, function(x) custom_func(x, O_low=1000000, 
         O_high=3000000, A_low=5000000, A_high=25000000), how='list')
#[[1]]
#[1] 0

#[[2]]
#[1] 3400000

Или без лямбда-вызова

rapply(example, custom_func, O_low=1000000, 
         O_high=3000000, A_low=5000000, A_high=25000000, how='list')
#[[1]]
#[1] 0

#[[2]]
#[1] 3400000
...