首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据R中的给定值选择最接近且更大的值

根据R中的给定值选择最接近且更大的值
EN

Stack Overflow用户
提问于 2020-09-29 08:42:24
回答 2查看 39关注 0票数 0

这里有2列

代码语言:javascript
复制
n <- c(10,30,50,80,100,300,500,800,1000,1500,2000)   
v <- c(1.3,1,0.85,0.75,0.65,0.5,0.4,0.35,0.3,0.26,0.23)

'n‘中的一个值对应于'v’中的一个值。现在,假设一个数字x作为以下函数的变量:

代码语言:javascript
复制
f<-function(x){1.3-(1.3-v)*(x-10)/(n-10)}

其中'n‘是与'x’最接近但更大的值。

示例:当x=24,然后是n=30,v=1,print(f)= 1.09时,当x=1001,然后是n=1500,v=0.26,...

我需要用x <- seq(from=1, to=5000)打印f的所有值

如何在R中实现这一点?

请帮帮忙。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-29 09:12:24

我们可以使用cut/findInterval来找到最接近的值,该值也大于传递的值。还要注意,我将nv作为附加参数传递给函数。

代码语言:javascript
复制
n <- c(10,30,50,80,100,300,500,800,1000,1500,2000)   
v <- c(1.3,1,0.85,0.75,0.65,0.5,0.4,0.35,0.3,0.26,0.23)

f<- function(x, n, v) {
  i <- findInterval(x, n, left.open = TRUE) + 1
  1.3-(1.3-v[i])*(x-10)/(n[i]-10)
}

f(24, n, v)
#[1] 1.09

f(1001, n, v)
#[1] 0.6082953

这个函数是矢量化的,所以你可以向它传递一个以上的值。

代码语言:javascript
复制
x <- seq(from=1, to=5000)
f(x, n, v)

#[1]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
#[8]       NaN       NaN       NaN 1.2850000 1.2700000 1.2550000 1.2400000
#[15] 1.2250000 1.2100000 1.1950000 1.1800000 1.1650000 1.1500000 1.1350000
#....
票数 0
EN

Stack Overflow用户

发布于 2020-09-29 08:57:21

我相信这就是你要找的。

代码语言:javascript
复制
f <- function(x) {

  nn <- min(n[which( n > x)]) # closed higher value to x in n
  vv <- v[which(n == nn)]     # corresponding value to nn in v

  1.3 - (1.3 - vv) * (x - 10) / (nn - 10)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64111366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档