繁体   English   中英

我要替换的物品数量不是替换长度警告的倍数

[英]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.seqx的平滑向量,而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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM