Есть несколько ошибок здесь:
1. Давайте начнем с общей for
-loop структуры:
companies<-c("a", "b", "c")
for(i in c){
Что должно c
быть здесь? c
не определен, поэтому R интерпретирует c
как функцию c
(см. ?c
), который, я уверен, вы не имеете в виду.
Так цикл всегда нужно что-то перебрать: список, вектор ... Я предполагаю, что вы имеете в виду
companies<-c("a", "b", "c")
for(i in companies){
2. Как решить данные/компаний:
Вы пытаетесь получить данные по [i]
. Это не имеет значения для R. Обычно [
используется для подмножества, как вы правильно используете, используя [4]
для обращения к четвертой колонке. Я предполагаю, что вы хотите получить глобальную переменную с именем «a», «b» или «c», как вы определили в companies
. Для этого используйте get(i)
.
Так если у вас есть 3 переменные в вашей глобальной окружающей среды (то есть, если вы наберете a
данные распечатана ...), вы можете сделать это:
companies<-c("a", "b", "c")
for(i in companies){
cor(x = get(i)[4], y = get(i)[5],use="pairwise.complete.obs", method = "pearson")
}
Чтобы напечатать все из них один на один ,
3. Как сохранить результат по вектору? , как вы делаете это
for(i in companies){
correlations = ...
}
В каждой итерации цикла correlations
получает присваивается новое значение. Таким образом, вы заканчиваете correlations
, являясь корреляцией последней компании.
Чтобы сохранить результаты, которые вы могли бы сделать что-то вроде этого:
Теперь correlations
именованный вектор со всеми корреляциями.
>>> Как это улучшить?
Если вы хотите выполнить одну и ту же операцию с несколькими объектами одинаковой структуры (например, вашими компаниями), рекомендуется сохранить эти объекты в списке, а затем работать с объектами списка. Это может быть сделано путем:
dat <- mget(companies)
my_cor <- function(x){
cor(x = x[4], y = x[5], use="pairwise.complete.obs", method = "pearson")
}
sapply(dat, my_cor) # gives you the list of your correlations
>>> Как улучшить этот:
Используйте dplyr
пакет следующим образом:
require(dplyr)
dat <- mget(companies)
dat <- bind_rows(dat, .id="company")
Теперь dat
это один большой data.frame содержащий информацию обо всех ваших компаниях. Дат%>% group_by (компания)%>% реферирования (корреляции = кор (VARIABLE_NAME_1, VARIABLE_NAME_2, используйте = "pairwise.complete.obs", метод = "Pearson")
для получения дополнительной информации смотрите здесь dplyr
-Пакет: https://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html
PS:.
Альтернатива dplyr
является data.table
Лично я нахожу dplyr
и tidyverse
проще в использовании для большинства задач
..
P.P.S .: Excelent говорить об управлении несколькими моделями, используя tidyverse
: https://www.youtube.com/watch?v=rz3_FDVt9eg
К 1 .: Я понял, что, когда я снова прочитал вопрос, но спасибо за указание на это. To 2 .: Большое спасибо, это именно то, что мне было нужно, я не знал, что есть такая функция, которая работает для моего situtation. – Wister