Использование строки для создания имени функции

#r

Вопрос:

Кто-нибудь знает способ вернуть три кадра данных с похожими именами без копирования и вставки?

В основном способ написать это:

 mean_dbh lt;- aggregate(dbh ~ date   plot, data, mean)  mean_agb lt;- aggregate(agb ~ date   plot, data, mean)  mean_ba lt;- aggregate(ba ~ date   plot, data, mean)  

что-то вроде

 for (val in c('dbh','agb','ba)){  mean_'val' lt;- aggregate(val ~ date   plot, data, mean) }  

Ответ №1:

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

 library(dplyr) df lt;- aggregate(cbind(dbh,agb,ba) ~ date   plot, data, mean) val lt;- c('dbh','agb','ba') for (i in seq(length(val))){  assign(paste0('mean_', val[i]), df %gt;% select(date, plot, val[i]))}  

Комментарии:

1. Мистер Клик дал ценный совет, но также мне очень хотелось узнать функцию paste0, она полезна. Спасибо!

Ответ №2:

В R мы стараемся избегать создания переменных со значениями, хранящимися в именах переменных. Это в целом значительно усложняет работу с этими данными.фреймами. Лучше работать со связанными значениями в списке. Вот альтернативный способ решения вашей проблемы

 vars lt;- c("dbh","agb","ba") mean_var lt;- vars |gt;  sapply(function(x) reformulate(c("date","plot"), response = x)) |gt;  lapply(function(x) aggregate(x, data, mean)) |gt;  setNames(vars)  

Это создаст список, и вы сможете извлечь значения с помощью

 mean_var$dbh mean_var$agb mean_var$ba # or... mean_var[[1]] mean_var[[2]] mean_var[[3]]