为什么这个函数找不到R中的最小值? 资料
我有两个向量,它们组合在一起创建一个为什么这个函数找不到R中的最小值? 资料,r,dplyr,R,Dplyr,我有两个向量,它们组合在一起创建一个数据帧: datax = data.frame(vlead = vlr, vfoll= vr) > dput(datax) structure(list(vlead = c(18, 18.1, 18.2, 18.3, 18.4, 18.5, 18.6, 18.7, 18.8, 18.9, 19, 19.1, 19.2, 19.3, 19.4, 19.5, 19.6, 19.7, 19.8, 19.9, 20, 20.1
数据帧:
datax = data.frame(vlead = vlr, vfoll= vr)
> dput(datax)
structure(list(vlead = c(18, 18.1, 18.2, 18.3, 18.4, 18.5, 18.6,
18.7, 18.8, 18.9, 19, 19.1, 19.2, 19.3, 19.4, 19.5, 19.6, 19.7,
19.8, 19.9, 20, 20.1, 20.2, 20.3, 20.4, 20.5, 20.6, 20.7, 20.8,
20.9, 21, 21.1, 21.2, 21.3, 21.4, 21.5, 21.6, 21.7, 21.8, 21.9,
22, 22.1, 22.2, 22.3, 22.4, 22.5, 22.6, 22.7, 22.8, 22.9, 23,
23.1, 23.2), vfoll = c(20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20)), .Names = c("vlead",
"vfoll"), row.names = c(NA, -53L), class = "data.frame")
作用
以及以下功能:
s_BX <- function(v,vl){
1.5 + 0.9*min(v,vl)
}
但结果是错误的:
函数不是获取给定行的vlead
和vfoll
的最小值,而是取整个向量的min
问题:
如何解决此问题以获得以下预期输出
> BX = sapply(vlr, function (x) 1.5+0.9*min(20,x))
> BX
[1] 17.70 17.79 17.88 17.97 18.06 18.15 18.24 18.33 18.42 18.51 18.60 18.69 18.78 18.87 18.96
[16] 19.05 19.14 19.23 19.32 19.41 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50
[31] 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50
[46] 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50
您可以使用rowwise()
:
将函数中的min
更改为pmin
。s_BX
@Arun非常感谢pmin
!我得到错误:error:不兼容的类型,需要一个数字向量
它适用于我所发布的结构。我的dplyr版本是0.4.1。你的是什么?我有dplyr 0.4.3
。这给了我错误,但谢谢你的回答。我不知道行方式。我在dplyr 0.4.3上检查了它,它仍然可以工作。您确定在发布数据结构时没有对其进行任何更改吗?是的,没有进行任何更改。我将在重新启动R后重试。
vlead vfoll BX
1 18.0 20 17.7
2 18.1 20 17.7
3 18.2 20 17.7
4 18.3 20 17.7
5 18.4 20 17.7
6 18.5 20 17.7
7 18.6 20 17.7
8 18.7 20 17.7
9 18.8 20 17.7
10 18.9 20 17.7
> BX = sapply(vlr, function (x) 1.5+0.9*min(20,x))
> BX
[1] 17.70 17.79 17.88 17.97 18.06 18.15 18.24 18.33 18.42 18.51 18.60 18.69 18.78 18.87 18.96
[16] 19.05 19.14 19.23 19.32 19.41 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50
[31] 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50
[46] 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50
datax %>% rowwise() %>% mutate(BX = s_BX(vfoll, vlead))