2015-05-05 3 views
0

Мой UDF:R Код: используя функцию с несколькими аргументами для применить функцию

testfn = function(x1, x2, x3){ 
if(x1 > 0){y = x1 + x2 + x3} 
if(x1 < 0){y = x1 - x2 - x3} 
return(y) 
} 

Мой Пробный тест набор:

test = cbind(rep(1,3),c(2,4,6),c(1,2,3)) 

Бег применяются:

apply(test, 1, testfn, x1 = test[1], x2 = test[2], x3 = test[3]) 

Это я получаю:

Ошибка в FUN (newX [, я], ...): неиспользованный аргумент (newX [, я])

Как я должен быть с помощью применять так, что мой UDF оценивает тестовый набор построчно ?

Я ожидал:

[1] 4-10

я представил упрощенный обобщенный UDF, потому что нужно использовать более сложные функции UDF.

+0

Почему 6 в качестве первого значения? Сумма первой строки равна 4. – nicola

ответ

0

Вы можете сделать то же самое, передавая функцию непосредственно в apply

apply(test, 1, function(x) if(x[1] > 0) sum(x) else x[1] - x[2] - x[3]) 

[1] 4 7 10 

Если вы хотите использовать UDF вам нужно изменить его.

testfn = function(mydf){ 
    if(mydf[1] > 0){y = mydf[1] + mydf[2] + mydf[3]} 
    if(mydf[1] < 0){y = mydf[1] - mydf[2] - mydf[3]} 
    return(y) 
} 

apply(test, 1, testfn) 
+0

Есть ли способ использовать мой UDF? Потому что я предоставил упрощенный UDF, поскольку мои UDF намного сложнее. –

+0

Обновлен ответ на использование UDF. – tcash21

+0

СПАСИБО! оно работает! :) –

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