Почему цикл for не использует 'i', указанное в функции - PullRequest
0 голосов
/ 15 октября 2018

У меня есть фрейм данных с 25 неделями наблюдений за животным и всего 20 животными.Я пытаюсь написать функцию, которая вычисляет линейное уравнение между 2 точками каждый раз и делает это для 25 недель и 20 животных.

Я хочу использовать общую форму уравнения, чтобы я мог вычислить значенияв любой точке.В функции Week = t, Weight = d.

Я не могу понять, как заставить это работать.Я не думаю, что цикл работает с использованием каждой строки фрейма данных в качестве индекса для функции.Мой фрейм данных с именем Growth выглядит примерно так:

Week   Weight Animal
1        50      1
2        60      1
n=25
1        80      2
2        90      2
                 .
                 .
                 20

for (i in growth$Week){
    eq<- function(t){
      d = growth$BW.Kg
      t = growth$Week
      (d[i+1]-d[i])/(t[i+1]-t[i])*(t-t[i])+d[i]
      return(eq)
    }
}

eq(3)

1 Ответ

0 голосов
/ 15 октября 2018

ОК, поэтому я думаю, что здесь есть несколько моментов путаницы.Первый - это написание функции внутри цикла for.Происходит то, что вы переписываете функцию снова и снова, и ваша функция нигде не сохраняет значения вашего уравнения.Во-вторых, вы передаете t в качестве аргумента, но ожидаете, что t будет следовать за циклом for со значением i.Наконец, вы говорите, что хотите, чтобы это было сделано для каждого животного, но значение животного не отображается в вашем коде.

Так что немного сложно увидеть, чего вы пытаетесь достичь здесь.

Основываясь на вашей информации выше, я переписал вашу функцию во что-то, что даст результат для вашего уравнения.

library(tidyverse)
growth <- tibble(week = 1:5,
             animal = 1,
             weight = c(50,52,55,54,57))

eq <- function(d,t,i){

  z <- (d[i+1]-d[i])/(t[i+1]-t[i])*(t-t[i])+d[i]
  return(z)
}

test_result <- eq(growth$weight,growth$week,3) 

Результаты:

[1] 57 56 55 54 53

Это тот результат, который вы ожидали?Или вы хотели только один результат в неделю на животное?Не могли бы вы привести рабочий пример формулы, которая дала бы один желаемый результат (т.е. результат для животного 1 на 1-й неделе)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...