2014-01-22 2 views
0

Привет Я пытаюсь использовать apply на матрице, которую я называю eq; То, что мне нравится делать, это отправить функцию, которую я сделал с несколькими аргументами. В настоящее время, когда я делаю это работает:отправить несколько аргументов, используя функцию apply

apply(eq, 1, manydo2) 

manydo2 <-function(x){ # do something with the vector x } 

Однако, когда я пытаюсь что-то вроде этого

apply(list("x1"=eq, "r1" = 18), 1, manydo2) 

он терпит неудачу, есть в любом случае я могу передать данные строки, а также какой-либо другой переменной сказать r1 в Это дело? много спасибо.

+1

Что вы здесь делаете? Вы хотите подмножить матрицу или хотите передать другие аргументы в eq? –

+0

Используйте 'apply' с массивом, матрицей или фреймом данных. Используйте 'lapply' для списка:' lapply (list ("x1" = eq, "r1" = 18), manydo2) '. – lukeA

+0

@JohnPaul извините за абстракцию. Я пытаюсь передать подмножество eq в функцию manydo2, но с несколькими аргументами. – Ahdee

ответ

3

Предполагая, что вы хотите передать строку и один аргумент, который является одинаковым для каждой строки:

manydo3 <- function(x, r1) NULL 
apply(eq, 1, manydo3, r1=18) 

Если вы хотите различные значения для второго аргумента для каждой строки, то вы хотите разделить ваши матрицы в строках и проходят обе строки и ваш другой аргумент с mapply:

mapply(manydo3, split(eq, row(eq)), R) 

где length(R) == nrow(eq) (т.е. R содержит R1, r2, и т.д.).

+1

Это плюс, если вам нравится, вы можете подмножить 'eq', например' apply (eq [eq $ colx == x1,], 1, manydo, r1 = 18) '. Если вы посмотрите на '? Apply', вы увидите, что у него есть аргумент' ... ', что означает, что вы можете добавить другие аргументы, и они будут отправлены в функцию, которую вы вызвали в' apply'. –

+0

Hi BrodieG и John, да, это прекрасно работает; Я закончил использовать что-то вроде этого «apply (eq [1: 5,1: 17], 1, manydo2, r1 = 18)», и он работает, поэтому большое вам спасибо! – Ahdee

Смежные вопросы