R错误:要替换的项目数不是替换长度R的倍数

R错误:要替换的项目数不是替换长度R的倍数,r,R,我编写了以下代码并得到错误:要替换的项目数不是代码行处替换长度的倍数: X_after[count, ] = c(censN1, censN2, censN3) 在搜索互联网后,我发现问题可能是由于NA的预确定n_样本和最终X_后数据集的样本数量不匹配造成的。如何调整矩阵代码,使ncol在循环后动态确定,而不是在n_样本时预先确定?或者,如果您对此错误消息有其他解决方案,请同时加入 multiLodSim <- function (GM, GSD, n_samples, n_itera

我编写了以下代码并得到错误:要替换的项目数不是代码行处替换长度的倍数:

 X_after[count, ] = c(censN1, censN2, censN3)
在搜索互联网后,我发现问题可能是由于
NA
的预确定
n_样本
和最终
X_后
数据集的样本数量不匹配造成的。如何调整矩阵代码,使
ncol
在循环后动态确定,而不是在n_样本时预先确定?或者,如果您对此错误消息有其他解决方案,请同时加入

multiLodSim <- function (GM, GSD, n_samples, n_iterations, p) {    
  X_after <- matrix(NA_real_, nrow = n_iterations, ncol = n_samples)
  delta <- matrix(NA_real_, nrow = n_iterations, ncol = n_samples)
  mu <- log(GM)
  sigma <- log(GSD)
  lod1 <- quantile(rlnorm(100000,mu,sigma),p)
  lod2 <-  quantile(rlnorm(100000,mu,sigma),(p*0.95))
  lod3 <- quantile(rlnorm(100000,mu,sigma),(p*0.9)) 
  pct_cens <- numeric(n_iterations)
  count <- 1
   while(count <= n_iterations) {     
   sub_samples = n_samples/3   # divide the total sample into third (for 3 lods)
  n1 <- rlnorm(sub_samples,mu,sigma)
censN1 <- sort(pmax(n1,lod1))   
n2 <- rlnorm(sub_samples,mu,sigma)
censN2 <- sort(pmax(n2,lod1))
censN2[censN2==lod1] <- lod2   
n3 <- rlnorm(sub_samples,mu,sigma)
censN3 <- sort(pmax(n3,lod1))    
censN3 [censN3==lod1] <- lod3
X_after[count, ] = c(censN1, censN2, censN3)
delta [count, ] = X_after <= lod1  # nondetects= TRUE (1), detects= FALSE (0)
pct_cens [count] = mean(delta[count,])   #
if (pct_cens [count]  > 0 & pct_cens [count] < 1 ) count <- count + 1}}

 a = multiLodSim(GM=1,GSD=2,n_samples=20,n_iterations=5,p=0.3)

你的问题在于
sub_samples=n_samples/3
不是整数

当您创建分数大小的样本时,它将创建
floor(size)

因此,当您重新组合数据时
长度(c(censN1,censN2,censN3))
不(必然)等于
n_样本


因此,您需要一种方法来处理不能被3整除的样本数。

您的问题在于
sub_samples=n_samples/3
不是整数

当您创建分数大小的样本时,它将创建
floor(size)

因此,当您重新组合数据时
长度(c(censN1,censN2,censN3))
不(必然)等于
n_样本


因此,您需要一种方法来处理不能被3整除的样本数。

为调用
rlnorm
定义的
mu
sigma
在哪里?除了mnel的答案之外,我想您会在这一行遇到麻烦:
delta[count,]=X_之后,您还希望在函数中的最后一个if语句/while循环后面有一行返回某些内容。(我假设
X_后
)所有三个子样本的大小必须完全相同吗?为调用
rlnorm
定义的
mu
sigma
在哪里?除了mnel的答案之外,我认为您在这一行会遇到麻烦:
delta[count,]=X_之后,您还希望在函数中的最后一个if语句/while循环后面有一行返回某些内容。(我推测
X_后的
)所有三个子样本的大小必须完全相同吗?
n1 = rlnorm(round(sub_samples),mu,sigma)
n2 = rlnorm(round(sub_samples),mu,sigma)
sub_samples3 = n_samples - length(n1)-length(n2)
n3 = rlnorm(subsamples3, mu,sigma)
length(rlnorm(1.5,1,1)) 
## [1] 1