Использование строк фрейма данных expand.grid в качестве входных данных для пользовательской функции - PullRequest
0 голосов
/ 08 января 2019

У меня есть пользовательская функция, которая берет вектор из 6 переменных и возвращает матрицу примерно так:

my_function <- (vect){
a=as.numeric(vect[1])
b=as.numeric(vect[2])
c=as.numeric(vect[3])
d=as.numeric(vect[4])
e=as.numeric(vect[5])
f=as.numeric(vect[6])
.
.(using other custom functions here)
.
return(matrix)
}

Теперь я хочу сделать несколько входов в мою функцию и получить список матриц. Для создания всех необходимых мне входов я использовал функцию expand.grid, например:

> x=expand.grid(29,4:5,1,1,5,95)
> x
  Var1 Var2 Var3 Var4 Var5 Var6
1   29    4    1    1    5   95
2   29    5    1    1    5   95

Так что теперь я хотел бы передать каждую строку этого data.frame в качестве входных данных для my_function. Я попробовал функцию do.call, как это, но я получаю ошибку:

> y=do.call(my_function,x)
Error in (function (vect)  : 
   unused arguments (Var1 = c(29, 29), Var2 = 4:5, Var3 = c(1, 1), Var4 = 
c(1, 1), Var5 = c(5, 5), Var6 = c(95, 95))

Я пытался транспонировать свой фрейм данных x, но я получаю ту же ошибку:

> y=do.call(my_function,as.data.frame(t(x)))
Error in (function (vect)  : 
  unused arguments (V1 = c(29, 4, 1, 1, 5, 95), V2 = c(29, 5, 1, 1, 5, 95))

Я, конечно, не правильно использую функцию do.call, но у меня заканчиваются идеи ... Любая помощь?

1 Ответ

0 голосов
/ 08 января 2019

Попробуйте назвать ваш вектор в виде списка:

y=do.call(my_function,list(x))

Почему: ?do.call

do.call создает и выполняет вызов функции из имени или функции и списка аргументов, которые ему передаются.

Если я запускаю это, используя мою определенную функцию, например:

do.call(rowmean,x)#of course there's an R function for that

Тогда:

Ошибка в (функция (x): неиспользованные аргументы (Var1 = c (29, 29), Var2 = 4: 5, Var3 = c (1, 1), Var4 = c (1, 1), Var5 = c (5, 5), Var6 = c (95) , 95))

с помощью:

do.call(rowmean,list(x))

Работает как положено. Единственный способ проверить, предоставлена ​​ли ваша функция.

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