dplyr mutate,应用将变量(或对象、向量)合并到感兴趣的数据帧之外的函数 问题

dplyr mutate,应用将变量(或对象、向量)合并到感兴趣的数据帧之外的函数 问题,r,dplyr,R,Dplyr,我很好奇如何将函数应用于dplyr中的mutate函数,这需要一个参数,该参数是我在别处定义的向量 我有一个示例,它是从我实际要做的事情中抽象出来的(我取了几个列,检查该行中是否存在依赖于表日期的值,然后返回一个字符串分类),但是为了简洁起见,下面的示例会产生相同的错误,希望这样就足够了 安装程序 或 但在本例和其他许多情况下,我经常发现在DF之外定义一个向量,然后将一个函数与多个附加参数一起应用于每一行是很有价值的 我也看到这个问题通过apply函数族解决了,但我希望在dplyr中有一个方法,

我很好奇如何将函数应用于
dplyr
中的
mutate
函数,这需要一个参数,该参数是我在别处定义的向量

我有一个示例,它是从我实际要做的事情中抽象出来的(我取了几个列,检查该行中是否存在依赖于表日期的值,然后返回一个字符串分类),但是为了简洁起见,下面的示例会产生相同的错误,希望这样就足够了

安装程序 或

但在本例和其他许多情况下,我经常发现在DF之外定义一个向量,然后将一个函数与多个附加参数一起应用于每一行是很有价值的

我也看到这个问题通过apply函数族解决了,但我希望在
dplyr
中有一个方法,因为它速度很快,语法也很好


也许我们可以让Hadleyverse添加一个操作符,告诉
dplyr
跳出当前data.frame的范围,例如

CheckArray = seq(0,100, by = 2)

DF <- dplyr::mutate(
  DF,
  Num1_even = f(Num1, %o%CheckArray%o%)
  )
CheckArray=seq(0100,by=2)

DF这与
CheckArray
向量无关。问题在于
如果
语句未在
R
中矢量化,则
。您可以改用
ifelse
。那你的电话就行了。有关更多信息,请查看
?ifelse

f <- function(x, ArrayToCheck){
  ifelse(x %in% ArrayToCheck, TRUE, FALSE)
}

dplyr::mutate(
  DF,
  Num1_even = f(Num1, CheckArray)
)

这反映了函数的构造方式。它不需要向量输入,因此需要
行方式
才能工作<代码>DF%>%rowwise%>%mutate(Num1\u偶数=f(Num1,CheckArray))
我对您建议的代码有同样的问题?谢谢。我认为我遭受了围绕标量输入设计太多函数的错误。您是否有关于资源的建议,以确保我的函数将来都能够更正确地处理向量参数?我想到了
?Vectorize
函数。但一般来说,用向量参数快速测试函数是个好主意。如果
f(1:2,ArrayToCheck)
有效,则一切正常。
dplyr::mutate(
  DF,
  Num1_even = Num1 %in% CheckArray
)
dplyr::mutate(
     DF,
     Num1_even = Num1 %in% seq(0,100, by = 2)
)
CheckArray = seq(0,100, by = 2)

DF <- dplyr::mutate(
  DF,
  Num1_even = f(Num1, %o%CheckArray%o%)
  )
f <- function(x, ArrayToCheck){
  ifelse(x %in% ArrayToCheck, TRUE, FALSE)
}

dplyr::mutate(
  DF,
  Num1_even = f(Num1, CheckArray)
)
f <- function(x, ArrayToCheck){
  x %in% ArrayToCheck
}