2015-09-09 2 views
-2

это мой набор данных:как сделать петлю для функции

Tree  a b  k 
4412 17.54 14.88 0.0757 
4413 53.85 5.89 0.03 
4414 24.01 13.09 0.0681 
4415 34.94 6.81 0.0341 
4416 24.05 7.96 0.0436 
4417 36.6 10.42 0.0524 
4418 31.77 13.29 0.0663 

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

a <- (DF$a) 
b<- (DF$b) 
k <- (DF$k) 
t <- seq(100, 365,1) 

y <- a*exp(-exp(b - k*t)) 
plot(y~t) 
+0

Я думаю, вам нужно изменить '', '' '' или так, чтобы класс столбца был 'numeric'. Может быть использовано 'dec = ','' в 'read.csv' – akrun

+0

да я определяю пробел в read.csv, но мне нужно сделать цикл для вычисления значения y для каждого дерева. – Madamespring

+0

Используйте функцию apply с ваша функция как анонимная функция. Если вы снова представите свои данные (с периодами, а не запятыми или еще лучше, как воспроизводимый пример), я (или, скорее всего, кто-то другой) проверит и опубликует ответ для вас. – user1945827

ответ

1

Мы можем использовать lapply с анонимными функциями Переберите каждое дерево в наборе данных, генерировать данные графика и собирать объект участка. Предполагая, что ваш набор данных называется df ...

 t <- (seq(100, 365, 1)) 



    plot_list <- lapply(split(df, df$Tree), function(x) { 


     y <- x[['a']] * exp(-exp(x[['b']] - x[['k']]*t)) 


     plot_data <- data.frame(t=t,y=y) 

     plt <- plot(y~t, data = plot_data) 
     plt 
} 
) 

Это возвращает список объектов, где каждый элемент является объектом участок для заданного дерева.

+0

спасибо, что это работает, но я не понимаю, почему вы сделали числовое (2)) – Madamespring

+1

Я бы создал Т вне цикла, нет причин создавать одно и то же снова и снова. – Tensibai

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