[英]number of items to replace is not a multiple of replacement length warning is my function
首先,我有你的向量
(x <- c(7.2, 8.6, 9.1, 9.5, 10.9, 10.9, 11.1, 11.5, 11.7,
11.9, 11.9, 12.7, 12.9, 13.9, 14.1, 14.5, 14.7))
#> [1] 7.2 8.6 9.1 9.5 10.9 10.9 11.1 11.5 11.7 11.9 11.9 12.7 12.9 13.9 14.1 14.5
#> [17] 14.7
(qjx <- c(6.12, 7.90, 8.85, 9.30, 10.20, 10.90, 11.00, 11.30, 11.60,
11.80, 11.90, 12.30, 12.80, 13.40, 14.00, 14.30, 14.60, 17.42))
#> [1] 6.12 7.90 8.85 9.30 10.20 10.90 11.00 11.30 11.60 11.80 11.90 12.30 12.80
#> [14] 13.40 14.00 14.30 14.60 17.42
(rjx <- c(1.78, 0.95, 0.45, 0.9, 0.7, 0.1, 0.3, 0.3,
0.2, 0.1, 0.4, 0.5, 0.6, 0.6, 0.3, 0.3, 2.82))
#> [1] 1.78 0.95 0.45 0.90 0.70 0.10 0.30 0.30 0.20 0.10 0.40 0.50 0.60 0.60 0.30 0.30
#> [17] 2.82
因为x.seq
是x
的平滑向量,而Fm
是确定向量x
cdf值的x
x.seq <- seq(qjx[1],qjx[m+1],by=0.01)
Fm <- function(data,x){ #data = smooth data, x = intial data
x.smooth <- NULL;
xsmooth <- matrix(,nrow=(length(x)),ncol=length(data))
xsmooth. <- matrix(,nrow=(length(x)),ncol=length(data))
for(i in 1:m){
for(j in 1:length(data)){
xsmooth[i,j] <- (data[j] - qjx[i])/rjx[i]
if(xsmooth[i,j] < 0){
xsmooth.[i,j] <- 0
} else
if(xsmooth[i,j] >= 0 && xsmooth[i,j] <= 1){
xsmooth.[i,j] = xsmooth[i,j]
} else
if(xsmooth[i,j] > 1){
xsmooth.[i,j] <- 1
}
}
}
xsmoothing <- NULL
for(k in 1:ncol(xsmooth.)){
xsmoothing[k] <- mean(xsmooth.[,k])
}
print(as.numeric(xsmoothing))
}
接下来我想用下面的函数从函数Fm
计算t
的逆值
m <- length(x)
Finv <- function(t){
if(t > 0){
f.inv <- matrix(,ncol=2,nrow=m)
k <- 1;f.invers <- NULL
while(k <= m){
f.inv[k,1] <- (k-1)/m
f.inv[k,2] <- k/m
if(t >= f.inv[k,1] && t <= f.inv[k,2]){
f.invers[k] <- (((m*t)-(k-1))*rjx[k])+qjx[k]
} else
f.invers[k] <- NA
k <- k+1
}
hasil <- as.numeric(f.invers[!is.na(f.invers)])
print(hasil)
} else
hasil <- L # L = the initial value,for example L is 2.06
print(as.numeric(hasil))
}
之所以这样,是因为我有很多t
序列。 因此,我为从1到最后一个阶数的每个q
编译t
的向量
t <- Fm(x.seq,x)
invers <- NULL
for(q in 1:length(t)){
print(invers[q] <- Finv(1-t[q]))
}
invers
它可以正常工作,但是在处理invers的值时,会有警告
Warning messages:
1: In invers[q] <- Finv(1 - t[q]) :
number of items to replace is not a multiple of replacement length
2: In invers[q] <- Finv(1 - t[q]) :
number of items to replace is not a multiple of replacement length
3: In invers[q] <- Finv(1 - t[q]) :
number of items to replace is not a multiple of replacement length
4: In invers[q] <- Finv(1 - t[q]) :
number of items to replace is not a multiple of replacement length
5: In invers[q] <- Finv(1 - t[q]) :
number of items to replace is not a multiple of replacement length
6: In invers[q] <- Finv(1 - t[q]) :
number of items to replace is not a multiple of replacement length
我只是想知道我的逆函数出了什么问题。 谢谢
t之后再试试
invers<-vector()
invers <- NULL
for(q in 1:(length(t)-1)){
invers<-c(invers,Finv(1-t[q]))
}
invers
我将对此进行测试:
invers <- NULL
for(q in 1:(length(t))){
invers<-c(invers,Finv(1-t[q]))
}
invers
invers1<-vector()
invers1 <- NULL
for(q in 1:(length(t)-1)){
invers1<-c(invers,Finv(1-t[q]))
}
invers1
which(invers[1:1134]!=invers1[1:1134])
这是来自控制台的结果。
> which(invers[1:1134]!=invers1[1:1134])
integer(0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.