2016-04-21 5 views
0

Уважаемые StackOverflow сообщества,R цикл заселить новую переменную

Я в растерянности с моим для цикла, и я уверен, что это небольшая проблема. Я просматривать вопросы цикла, которые уже были заданы ...

Вот то, что я до сих пор:

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

Должен ли я взять переменную p из цикла for? – 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

Это работало как шарм! Спасибо, Лесли! – Primesty

2

Без петли

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

Спасибо, Ричард! – Primesty

Смежные вопросы