R语言replicate模拟中保留每次结果前15个片段的问题
解决R语言replicate模拟保留前15个片段的问题
问题出在你的replicate匿名函数中,当前返回的是完整的lst而非你想要的前15个元素。你在代码里先写了lst(这会成为代码块的返回值),之后定义的frag并没有被作为最终返回值输出。
修改后的代码如下:
nsim <- 1000 ## numero de simulaciones ll2 <- replicate(nsim, { ## Generate the sequence alph <- c("a", "c", "g", "t") seq <- sample(alph, size = lseq, prob = prop, replace = TRUE) Nsitrest <- strsplit(c2s(seq), split = sitrest)[[1]] lst <- nchar(Nsitrest) nl <- length(lst) if (nl > 1) { lst[1] <- lst[1] + 0.5 * nchar(sitrest) lst[nl] <- lst[nl] + 0.5 * nchar(sitrest) } if (nl > 2) lst[2:(nl - 1)] <- lst[2:(nl - 1)] + nchar(sitrest) # 直接处理并返回前15个元素,替换原来单独的lst行 frag <- lst[1:15] frag })
关键说明:
- 在R的代码块中,最后一个表达式的结果会被作为返回值。你之前的代码先执行了
lst,这会让完整的lst成为replicate的返回内容,后面的frag定义和调用不会覆盖这个返回值。 - 如果某次模拟生成的片段数量不足15个,
lst[1:15]会自动用NA填充空缺位置。如果你想避免NA,可以改用head(lst, 15),效果类似,但长度不足时不会补NA,仅返回现有全部元素。
内容的提问来源于stack exchange,提问作者quik1399
相关产品推荐
相关产品推荐

