Имена функций в цикле for не работают. R - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть группа data.frame с одинаковыми размерами столбца, но с разными номерами строк.

DATA.FRAME.A
Column_A     Column_B     Column_C     Column_D      Column_E
2001-02-20      10           11           5              8

DATA.FRAME_B
Column_F     Column_G      Column_W    Column_T      Column_Q
2008-08-7        50           21          10             50

DATA.FRAME_C
Column_H     Column_J      Column_K    Column_S      Column_P
2001-02-02      13           15           61             7

Моя цель - сделать первый ряд одинаковым для всех data.frame

Я написал этот цикл для того, чтобы сделать мой код простым.

t <- list(DATA.FRAME_A, DATA.FRAME_B, DATA.FRAME_C)
for (i in t ) {
  names[i] <- c("Data", "Open", "Max", "Minimun", "Close")
   }

R не дает мне никакой ошибки.

Где я был не прав?

Я бы хотел получить эти результаты

DATA.FRAME.A
   Data        Open          Max       Minimun      Close
2001-02-20      10           11           5              8

DATA.FRAME_B
 Data           Open          Max       Minimun      Close
2008-08-7        50           21          10             50

DATA.FRAME_C
 Data          Open          Max       Minimun      Close
2001-02-02      13           15           61             7

Заранее спасибо.

Francesco

Ответы [ 4 ]

0 голосов
/ 06 сентября 2018

для подстановки списка в R требуются двойные квадратные скобки

t <- list(DATA.FRAME_A, DATA.FRAME_B, DATA.FRAME_C)
for (i in seq_along(t) ) {
  names(t[[i]]) <- c("Data", "Open", "Max", "Minimun", "Close")
 }

То, что вы сделали, не было ошибкой, вы меняете i в цикле for, но я - временная переменная, созданная для цикла forи уничтожается после каждой итерации, а не изменяет ваш список

0 голосов
/ 06 сентября 2018

Рассмотрим lapply, часть семейства apply , которые являются полезными итеративными функциями, которые возвращают то же количество элементов в качестве входных данных, и в вашем случае могут возвращать измененные элементы фрейма данных. Даже рассмотрим setNames() как правую функцию для возврата именованного объекта.

t <- list(DATA.FRAME_A, DATA.FRAME_B, DATA.FRAME_C)

# ITERATE THROUGH EACH DF OF t, RENAMING COLUMNS, RETURNING MODIFIED DF
new_t <- lapply(t, function(i) setNames(i, c("Data", "Open", "Max", "Minimun", "Close"))

 # RESULTS
lapply(new_t, head)
0 голосов
/ 06 сентября 2018

Исходя из написанного вами кода, переменная цикла i будет являться каждым из отдельных элементов списка t (не index в списке, а сами элементы списка). Кроме того, colnames будет более простым для этой цели. Лучший способ написать этот цикл:

t <- list(DATA.FRAME_A, DATA.FRAME_B, DATA.FRAME_C)
for (i in 1:length(t)) {
  colnames(t[[i]]) <- c("Data", "Open", "Max", "Minimun", "Close")
}
0 голосов
/ 06 сентября 2018

Попробуйте это:

t <- c("DATA.FRAME.A", "DATA.FRAME.B", "DATA.FRAME.C")
for (i in 1:length(t)) {
    names(get(t[i])) <- c("Data", "Open", "Max", "Minimun", "Close")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...