2016-04-21 121 views
0

親愛的Stackoverflow社區,R爲循環填充新變量

我對我的for循環感到茫然,我敢肯定這是一個小問題。我可以用已經被問環題瀏覽...

這是我到目前爲止有:

xvals <- as.matrix(seq(1,10, 1)) 

我想創建一個基於橢圓橢圓

yvals <- for (i in 1:nrow(xvals)){ 
    p <- 2.69/(1+2.69) 
    if (i == 1){ 
    yvals[i,] <- round(p, 2)} 
    else { 
    yvals[i,] <- round(1-(p)^i, 2)} 
} 

不幸的是,這件事不斷拋出一個錯誤

Error in 1:nrow(xvals) : argument of length 0 

當我將xvals更改爲矩陣,我得到不同的錯誤:

Error in yvals[i, ] <- round(p, 2) : 
    incorrect number of subscripts on matrix 

回答

0

你真的想要一個矩陣或將一個向量嗎?

yvals <- replicate(10,0) 

p <- 2.69/(1+2.69) 
for (i in 1:length(yvals)){ 
    if (i == 1){ 
    yvals[i] <- round(p, 2) 
} 
    else { 
    yvals[i] <- round(1-(p)^i, 2)} 
} 

xvals <- 1:10 

plot(xvals, yvals) 

enter image description here

+0

我想用xvals和yvals變量繪製數據點對對方,所以我想一個向量會怎麼做? – Primesty

+0

我是否必須從for循環中取出p變量? – Primesty

+0

不,你不知道,但是因爲p變量對於循環的每次迭代都是相同的,所以將它放在循環之外在技術上更智能。 –

0

我覺得你應該先創建空矩陣,實現循環工作。試試這個,也許它可以幫助你

xvals <- as.matrix(seq(1,10, 1)) 
xvals 

yvals <- matrix(0, nrow=nrow(xvals),ncol=ncol(xvals)) 
yvals 
for (i in 1:nrow(xvals)){ 
p <- 2.69/(1+2.69) 
    if (i == 1){ 
    yvals[i,] <- round(p, 2)} 
    else { 
    yvals[i,] <- round(1-(p)^i, 2)} 
} 
yvals 
+0

這就像一個魅力!謝謝,Lesley! – Primesty

2

沒有循環

xvals <- 1:10 
p <- 2.69/(1+2.69) 
yvals <- 1-p^xvals 
yvals[1] <- p 
yvals <- round(yvals, 2) 
+0

謝謝,理查德! – Primesty