如何解决如何计算h点
我正在尝试编写一个计算h点的函数。该功能是在秩频率数据帧上定义的。 考虑以下data.frame:
DATA <-data.frame(frequency=c(49,48,46,38,29,24,23,22,15,12,10,9,9),rank=c(seq(1,15)))
和h点的公式是:
如果{存在r = f(r),h点= r }
否则{h-point = f(i)j-f(j)i / j-i + f(i)-f(j)}
其中 f(i)和 f(j)是ith和j等级的相应频率, i 和 j 是 i
现在,我已经尝试了以下代码:
fr <-function(x){d <-DATA$frequency[x]
return(d)}
for (i in 1:length(DATA$rank)) {
j <- i+1
if (i==fr(i))
return(i)
else(i<fr(i) && j>fr(j)) {
s <-fr(i)*j-fr(j)*i/j-i+fr(i)-fr(j)
return(s)
}}
我也尝试过:
for (i in 1:length(DATA$rank)) {
j <- i+1
if (i==fr(i))
return(i)
if (i<fr(i) while(j>fr(j))) {
s <-fr(i)*j-fr(j)*i/j-i+fr(i)-fr(j)
return(s)
}}
,它们都不起作用。对于 DATA ,所需结果将是 i = 11 和 j = 12 ,因此: h点= 12×12-10×11 / 12-11 + 12-10
你能告诉我我在做什么错吗?
解决方法
您可以这样做:
h_point <- function(data){
x <- seq(nrow(data))
f_x <- data[["frequency"]][x]
h <- which(x == f_x)
if(length(h)>1) h
else{
i <- which(x<f_x)
j <- which(x>f_x)
s <- which(outer(i,j,"-") == -1,TRUE)
i <- i[s[,1]]
j <- j[s[,2]]
cat("i: ",i,"j: ","\n")
f_x[i]*j - f_x[j]*i / (i-j + f_x[i]-f_x[j])
}
}
h_point(DATA)
i: 11 j: 12
[1] 34
,
我想我已经弄清楚了您要达到的目标。如果给定行的login$ = createEffect(() => this.actions$
.pipe(
ofType(AuthActions.login),switchMap(({ userName,password }) => this.userService.login(userName,password)
.pipe(
switchMap(() => this.matrixService.initClient(userName,password)),map((token) => AuthActions.loginSuccess()),catchError((error) => {
console.error('error',error);
return of(AppError({ error }));
})
)
),catchError((error) => {
console.error('error 2',error);
return of(AppError({ error }));
})
)
);
,我的循环将遍历DATA并在任何时候中断。如果更谨慎地使用rank == frequency
进行显式测试,而不是依靠i进行测试,以防排名受阻等。
如果行i的等级低于频率,行j的等级更高,则第二条if语句为行i和j计算h点(DATA$rank[i] == fr(i)
)。
这是您想要的吗?
s
我不确定公式是否正确,在您的循环中您有j-i,但在解释中是i-j。不确定整个DATA <-data.frame(frequency=c(49,48,46,38,29,24,23,22,15,12,10,9,9),rank=c(seq(1,15)))
fr <-function(x){d <-DATA$frequency[x]
return(d)}
for(i in 1:nrow(DATA)){
j <- i+1
if (i==fr(i)){
s <- list(ij=c(i=i,j=j),h=i)
break
}else if(i <fr(i) && j>fr(j)){
s <-list(ij=c(i=i,h=fr(i)*j-fr(j)*i/j-i+fr(i)-fr(j))
}}
是否是分母,分子是否类似。简单修复。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。