Использование для цикла правильно - PullRequest
0 голосов
/ 05 февраля 2020

Я никогда раньше не использовал циклы и хотел бы использовать их для своих данных. Тем не менее, я до сих пор не знаю, как правильно его использовать. Может кто-нибудь сказать мне, как правильно использовать для петель?

 For item 1 to 9 
 the results I wanted to get
real<lower=0>l1_0+l1_11
real<lower=0>l2_0+l2_11
real<lower=0>l3_0+l3_11
 ..
real<lower=0>l9_0+l9_11

For item 10 to 18
real<lower=0>l10_0+l10_12
real<lower=0>l11_0+l11_12
real<lower=0>l12_0+l12_12
..  
real<lower=18>l18_0+l18_12


  What I tried to do..
  for(i in 1:9){
  i=l[i]"_0"+l[i]"_11"
  print(paste("real<lower=0>",i))
  }

  for (i in 1:9){
  i<-paste('l',i,'_0',sep='')
  print(paste("real<lower=0>",i)
  }

1 Ответ

0 голосов
/ 05 февраля 2020

Предполагая, что у вас нет опыта программирования, и вы просто хотите знать, как использовать для l oop. Я создал очень простой фрейм данных и сделаю что-нибудь легко. Я хочу, чтобы сумма каждой строки в кадре данных (к счастью, у нас также есть семейство apply, чтобы сделать это просто).

df <- data.frame(x=c(1,4,2,6,7,1,8,9,1),
                 y=c(4,7,2,8,9,1,9,2,8))

Этот пример показан везде, что крайне неудовлетворительно.

for(i in 1:10){
  print(i)
}

Распечатайте только пример суммы каждой строки.

for(i in 1:nrow(df)){
  print(df$x[i]+df$y[i])
}

Эта часть часто ужасно объясняется везде (я не понимаю, почему? Возможно, я просто использовал неправильный поиск термины / ключевые слова?). К счастью, на Stack Exchange был хороший пример, который показал мне как. Итак, кредиты go кому-то еще. Тем не менее, эта часть довольно проста, но для кого-то, не имеющего опыта в моделировании, R или любом другом программировании, это может быть проблемой в заднице, чтобы понять. Чтобы сделать для l oop и сохранить результаты, вам нужно создать объект, который может хранить данные l oop.

Здесь просто для l oop, сохраняющего результаты в виде фрейм данных.

loopdf <- as.data.frame(matrix(ncol = 1, nrow = 0))
for(i in 1:nrow(df)){
  loopdf[i,] <- df$x[i]+df$y[i]
}
loopdf

Здесь простое для l oop сохранение результатов в списке.

looplist <- list()
for(i in 1:nrow(df)){
  looplist[[i]] <- df$x[i]+df$y[i]
}
do.call(rbind, looplist)

Здесь al oop объединение результатов в атомах c вектор.

loopvec <- NULL
for(i in 1:nrow(df)){
  loopvec <- c(loopvec, df$x[i]+df$y[i])
}

loopvec

Здесь применяются l oop (две версии).

apply(df, 1, sum)
apply(df, 1, function(x), sum(x))
...