这里有2列
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作为以下函数的变量:
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中实现这一点?
请帮帮忙。谢谢
发布于 2020-09-29 09:12:24
我们可以使用cut/findInterval来找到最接近的值,该值也大于传递的值。还要注意,我将n和v作为附加参数传递给函数。
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这个函数是矢量化的,所以你可以向它传递一个以上的值。
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
#....发布于 2020-09-29 08:57:21
我相信这就是你要找的。
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)
}https://stackoverflow.com/questions/64111366
复制相似问题