多参数R-sapply函数

多参数R-sapply函数,r,arguments,sapply,R,Arguments,Sapply,我有一个类似但不完全相同的问题要问 我有一个包含两个变量rshift start和rshift end(以及其他变量)的数据集。 这些变量包含时间,例如23:30:00或00:00:00。 如果两个变量都为零,我想将rshift start和rshift end替换为NA,即“00:00:00” 我已经编写了一个函数,我认为可以完成这项工作: # Change '00:00:00' to NA where both variables are '00:00:00' zeroTime=functi

我有一个类似但不完全相同的问题要问

我有一个包含两个变量rshift start和rshift end(以及其他变量)的数据集。 这些变量包含时间,例如23:30:00或00:00:00。 如果两个变量都为零,我想将rshift start和rshift end替换为NA,即“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)
但这种语法是不正确的。也许每次通话我只能更改一个变量,即rshift start或rshift end,没关系

有什么想法吗? 谢谢 皮特

像这样的事

rosterSample <- data.frame(RSHIFTSTART=c('00:00:00', '01:00:00', '00:00:00'), RSHIFTEND=c('10:00:00', '00:00:00', '00:00:00'), stringsAsFactors=FALSE)
ind <- with(rosterSample, RSHIFTSTART=='00:00:00' & RSHIFTEND=='00:00:00')
rosterSample$RSHIFTSTART[ind] <- NA
rosterSample$RSHIFTEND[ind] <- NA
类似这样的东西

rosterSample <- data.frame(RSHIFTSTART=c('00:00:00', '01:00:00', '00:00:00'), RSHIFTEND=c('10:00:00', '00:00:00', '00:00:00'), stringsAsFactors=FALSE)
ind <- with(rosterSample, RSHIFTSTART=='00:00:00' & RSHIFTEND=='00:00:00')
rosterSample$RSHIFTSTART[ind] <- NA
rosterSample$RSHIFTEND[ind] <- NA

rosterSample
怎么样?mapply
:“mapply是Sappy的多变量版本”
Sappy
mapply
不是正确的方法。R使用按值传递,而不是按引用传递。这意味着
zeroTime
不会在函数范围之外修改其
x
y
参数@Karl的答案是正确的方法。谢谢flodel,如果函数只是通过值传递,并且必须返回更新的变量,这是有意义的。Thomas也谢谢你-我在搜索中没有看到这个问题。mapply怎么样?mapply
:“mapply是Sappy的多元版本”
Sappy
mapply
不是正确的方法。R使用按值传递,而不是按引用传递。这意味着
zeroTime
不会在函数范围之外修改其
x
y
参数@Karl的答案是正确的方法。谢谢flodel,如果函数只是通过值传递,并且必须返回更新的变量,这是有意义的。托马斯也谢谢你-我在搜索中没有看到这个问题。谢谢卡尔-这应该可以解决问题。非常感谢您提供的示例代码,非常感谢。谢谢Karl-这样就可以了。谢谢你的示例代码,非常感谢。