2017-01-13 3 views
0

У меня следующий код р парУсловный цикл в R

x =c(1.7, 2.2, 14.4, 1.1, .4, 20.6, 5.3, .7, 1.9, 13, 12, 9.3, 1.4, 18.7, 8.5, 25.5, 11.6, 
    14.1, 22.1, 1.1, 2.5, 14.4, 1.7, 37.6 ,.6, 2.2, 39, .3, 15, 11, 7.3, 22.9, 1.7, .1, 1.1, 
    .6, 9, 1.7, 7, 20.1, .4, 2.8, 14.1, 9.9, 10.4, 10.7, 30, 3.6, 5.6, 30.8, 13.3, 4.2, 25.5, 
    3.4, 11.9, 21.5, 27.6, 36.4, 2.7, 64, 1.5, 2.5, 27.4, 1, 27.1, 20.2, 16.8, 5.3, 9.7, 27.5, 
    2.5, 27) 

n=length(x) 

k=matrix(c(-1,-0.5,0,0.5,1), nrow=5, ncol=1) 

gamma=0.1    

lambda=matrix(c(0,0.25,0.5,0.75,1), nrow=5, ncol=1)     

    f<-matrix(data=NA, nrow=72, ncol=5) 

for (i in 1:5) 

{f[,i]<-((k[i,])*(.1^(k[i,])/(x^(k[i,]+1))))*((1- 
    lambda[1])+2*lambda[1]*((.1/x)^(k[i,]))) 
} 

Результат этой функции основана на различных значениях к и одного значения лямбда. Я хочу создать матрицу из 25 на 72 и вычислить результаты, основанные на разных значениях k и лямбда. Таким образом, первые пять столбцов так называемой приведенной матрицы будут результатом значений k и первого значения лямбда, столбцы 6-10 будут представлены на основе значений k и второго значения лямбда и так далее.

+4

Измените свой код, исправляя отступ и добавляя пробелы (и, возможно, разрыв строки или два) внутри цикла 'for'. Это очень поможет в удобочитаемости. Также попробуйте сделать свой код минимальным - вы загружаете 5 пакетов вверху (и устанавливаете 2 пакета, один из которых был загружен первым?), Но вы, похоже, не используете ни один из них. Пожалуйста, удалите такие строки, если они не имеют отношения к вашему вопросу и не нужны для иллюстрации проблемы. Это также относится к строкам типа 'mean (x)' - поскольку вы не используете среднее значение позже, кажется, что эта строка просто беспорядочна. – Gregor

+0

Извините за это. я починил это – Iftikhar

ответ

1

Похоже, вложенный for цикла является то, что требуется

x <- c(1.7, 2.2, 14.4, 1.1, .4, 20.6, 5.3, .7, 1.9, 13, 12, 9.3, 1.4, 18.7, 8.5, 25.5, 11.6, 
    14.1, 22.1, 1.1, 2.5, 14.4, 1.7, 37.6 ,.6, 2.2, 39, .3, 15, 11, 7.3, 22.9, 1.7, .1, 1.1, 
    .6, 9, 1.7, 7, 20.1, .4, 2.8, 14.1, 9.9, 10.4, 10.7, 30, 3.6, 5.6, 30.8, 13.3, 4.2, 25.5, 
    3.4, 11.9, 21.5, 27.6, 36.4, 2.7, 64, 1.5, 2.5, 27.4, 1, 27.1, 20.2, 16.8, 5.3, 9.7, 27.5, 
    2.5, 27) 
k <- c(-1,-0.5,0,0.5,1) 
lambda <- c(0,0.25,0.5,0.75,1)     
f <- matrix(, nrow = 72, ncol = 25) 

for (i in seq_along(lambda)) { 
    for (j in seq_along(k)) { 
    f[, (i - 1) * 5 + j] <- k[j] * .1^k[j]/x^(k[j] + 1) * (1 - lambda[i]) + 2 * lambda[i] * (.1/x)^k[j] 
    } 
} 

Там может способ написать это с вложенной sapply, но это, вероятно, будет легче следовать, так как это довольно долго уравнение

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