Есть ли способ запуска команд из нескольких наборов данных R? - PullRequest
1 голос
/ 17 апреля 2020

Я очень плохо знаком с R и хотел бы использовать некоторый код для запуска различного пакетного кода на всех имеющихся у меня данных. Должно быть ясно, что я пытаюсь сделать:

# library(PerformanceAnalytics)
# mydata <- mtcars[, c('mpg', 'cyl', 'disp', 'hp', 'carb')];
# chart.Correlation(mydata, histogram=TRUE, pch=19)

library(MASS)
M_names = data(package = "MASS")$result[, "Item"]
for (i in 1:length(M_names)) {
    eval(paste("MASS::", M_names[i], sep=""));
}

Закомментированная часть - это некоторый код, который я обнаружил, но пока не смог интегрировать. Correlation - это очень крутая корреляционная матрица, в которой я пытаюсь собрать каждый отдельный набор данных, к которому у меня есть доступ, чтобы я мог быстро просмотреть их, а не делать все вручную. Я предполагаю, что мне нужно будет сохранить их все в PNG, чтобы иметь практический рабочий процесс вокруг этого, поскольку ясно, что нет способа уговорить X windows появляться или оставаться на месте при запуске кода R в виде сценария.

Поведение, которое я наблюдаю, когда выполняю это на своем Ma c, выглядит следующим образом:

> library(MASS)
> M_names = data(package = "MASS")$result[, "Item"]
> for (i in 1:length(M_names)) {
+       eval(paste("MASS::", M_names[i], sep=""));
+ }
>
>

Я не знаю точно, что означает тихий индикатор +, но я уверен, что он просто означает эта строка кода находится внутри области видимости для l oop. Но eval глотает команду, которую я собрал. Я просто пытаюсь заставить его распечатывать содержимое данных на каждой итерации l oop.

Я также заметил это:

> eval("MASS::ships")
[1] "MASS::ships"

Это просто печатает его, когда я пытаюсь его оценить.

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

1 Ответ

0 голосов
/ 30 апреля 2020

Если у вас есть имена наборов данных пакета в векторе, ключом к доступу к ним по именам их символов является функция get:

library(MASS)
M_names = data(package = "MASS")$result[, "Item"]

head(get(M_names[1]), 1)
#    state sex  diag death status T.categ age
#  1   NSW   M 10905 11081      D      hs  35  

Затем вы можете l oop через вектор имен

for (DATA in M_names) print(summary(get(DATA)))

Другой вариант - использовать аргумент envir функции data для загрузки наборов данных в определенную среду c. Возможно, стоит добавить данные в новую среду вместо того, чтобы загрязнять ваше рабочее пространство. Это можно сделать с помощью

data(list=M_names, package="MASS", envir = list_of_datafames<- new.env())

Затем вы можете просмотреть list_of_datafames, как если бы вы использовали другой объект списка:

lapply(list_of_datafames, summary)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...