У меня есть подобный, но не совсем такой же вопрос R apply function with multiple parametersR - sapply функции с несколькими аргументами
У меня есть набор данных с двумя переменными RSHIFTSTART и RSHIFTEND (среди других переменных). Эти переменные содержат время, например. 23:30:00 или 00:00:00. Я бы хотел заменить RSHIFTSTART и RSHIFTEND на NA везде, где BOTH-переменные равны нулю, т.е. '00: 00: 00' .
Я написал функцию, которая, я думаю, может сделать работу:
# Change '00:00:00' to NA where both variables are '00:00:00'
zeroTime=function(x,y) {
if (x=='00:00:00' & y=='00:00:00') {
replace(x,x=='00:00:00',NA)
replace(y,x=='00:00:00',NA)
}
}
Мой вопрос заключается в том, как применять эту функцию для обновления переменных т.е. набора данных. снабжая два аргумента. Я пробовал:
sapply(rosterSample$RSHIFTSTART,rosterSample$RSHIFTEND,zeroTime)
, но этот синтаксис неверен. Возможно, мне будет запрещено изменять только одну переменную за вызов, т. Е. RSHIFTSTART или RSHIFTEND, все в порядке.
Любые идеи? Thanks Pete
как о 'mapply': "mapply является многомерной версией sapply" – shadow
' sapply' или 'mapply' не правильный подход здесь. R использует * pass-by-value *, а не * pass-by-reference *. Это означает, что 'zeroTime' не изменяет свои аргументы' x' и 'y' вне области действия функции. @ Ответ Карла - правильный подход. – flodel
Спасибо flodel, это имеет смысл, если функции просто передаются по значению и должны возвращать обновленную переменную. Томас тоже благодарен за это - я не видел этого вопроса в своих поисках. – Pete855217