我有下面的代码,上面有一个循环,其中包含一个值foreach($_FILES[ 'file' ] as $k=> $v )
{
$arr[ $k ] = array( $v );
}
:
X
我想知道我可以将我的X设置为n = 25
X = 1
p = 0.2 #probability
P = matrix( c(p, 1-p, 0, 0, 0, 0,
p, 0, 1-p, 0, 0, 0,
p, 0, 0, 1-p, 0, 0,
0, p, 0, 0, 1-p, 0,
0, 0, p, 0, 0, 1-p,
0, 0, 0, p, 0, 1-p),
ncol=6, nrow=6, byrow = TRUE) #transition matrix
for(i in 1:n){
Y = runif(1) #uniform sample
k = P[X[i], ] #calculate k values
k = cumsum(k)
if(Y <= k[1]){ #update the chain
X[i+1] = 1}
else if(Y <= k[2]){
X[i+1] = 2}
else if (Y <= k[3]){
X[i+1] = 3}
else if (Y<=k[4]){
X[i+1] = 4}
else if (Y<=k[5]){
X[i+1] = 5}
else {X[i+1]=6}
}
plot(1:n, X[1:i], type = 's')
这样的多数据,这样我就可以只在一行代码中运行X = c(1,3,4)
的所有三个值而无需重新模拟更改X
的值?结果应该产生三个图表。
答案 0 :(得分:0)
首先,如果您想重新使用该代码,则需要将代码放在函数中。其次,在您发布的代码中,您在图形设备中绘制图形,在您绘制其他内容后将丢失图形,因此您可能希望将其保存为PDF或PNG或类似的内容:
xtoplot <- function(X, n = 25, p = 0.2, transit = P){
for(i in 1:n){
Y <- runif(1) # uniform sample
k <- P[X[i], ] # calculate k values
k <- cumsum(k)
if(Y <= k[1]){ # update the chain
X[i+1] <- 1}
else if(Y <= k[2]){
X[i+1] <- 2}
else if(Y <= k[3]){
X[i+1] <- 3}
else if(Y <= k[4]){
X[i+1] <- 4}
else if(Y <= k[5]){
X[i+1] <- 5}
else{
X[i+1] <- 6}
}
pltname <- paste0("plot_", X, ".pdf") # The document name of the plot
pdf(pltname) # Tell R to prepare to export something to PDF
plot(1:n, X[1:i], type = 's') # The plot to be exported
dev.off()
}
现在该功能已经到位,您可以使用&#34; apply()
- 家庭&#34;的成员。为X
运行多个输入值的函数,如下所示:
lapply(c(1,3,4), xtoplot)
在您的工作目录中,您将找到三个PDF,名为plot_1.pdf,plot_3.pdf和plot_4.pdf,其中包含您要查找的图表。