Ошибка в коде в R: цель назначения распространяется на неязыковой объект - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь сделать цикл в R, чтобы извлечь столбцы из xts-кадра и создать 49 разных df. Однако, когда я пытаюсь запустить его, я получаю ошибку: цель назначения расширяется до неязыкового объекта

p_15_19 - это оригинальный файл xts с 50 столбцами (первый столбец - дата), и в основном я хочу сделать 49новые файлы с именами:

v1_15_19

v2_15_19

.

.

v49_15_19

for(i in 1:49) {
  assign(paste("v",i,"_15_19",sep=""))<-p_15_19[,c(i+1)]
}

1 Ответ

2 голосов
/ 16 октября 2019

Если вы действительно хотите это сделать, проблема заключается в вашем assign(...1) <- ...2 коде (... 1 - первые аргументы и ... 2 - вторые аргументы). Эту проблему легко решить, следуя доступной документации, выполнив help(assign) и прочитав документацию. Правильная формулировка просто assign(...1, ...2), где ...1 будет именем переменной, а ...2 - значением переменной.

Однако! это крайне неэффективно, и, если вы хотите выполнить подобный код после этого, вы, скорее всего, ищете list объекты.

dfs <- vector("list", 49)
#name the list of data.frames
names(dfs) <- paste0("v", 1:49, "_15_19")
for(i in 1:49)
    dfs[[i]] <- p_15_19[, i+1]

В dfs теперь у вас есть каждый лист в файле xts, содержащий индексы [[1]], [[2]], ... и так далее. На них также можно ссылаться по имени. Предполагая, что все они содержат только числовые переменные, проще выполнить сводную статистику, такую ​​как mean median и т. Д. Или более сложные функции. Например, используя функцию lapply (list-apply)

#calculate mean of each sheet and remove missing values.
lapply(dfs, mean, na.omit = TRUE) 
...