Загрузите набор данных в R с данными(), используя переменную вместо имени набора данных

Я пытаюсь загрузить набор данных в R, используя функцию data(). Он отлично работает, когда я использую имя набора данных (например, data(Titanic) или data("Titanic")). Для меня не работает загрузка набора данных с использованием переменной вместо ее имени. Например:

# This works fine:
> data(Titanic)

# This works fine as well:
> data("Titanic")

# This doesn't work:
> myvar <- Titanic
> data(myvar)
**Warning message:
In data(myvar) : data set ‘myvar’ not found**

Почему R ищет набор данных с именем "myvar", поскольку он не цитируется? И поскольку это поведение по умолчанию, не существует способа загрузить набор данных, хранящийся в переменной?

Для записи то, что я пытаюсь сделать, это создать функцию, которая использует правила ассоциации "arules" и мины с использованием Apriori. Таким образом, мне нужно передать набор данных в качестве параметра этой функции.

myfun <- function(mydataset) {
    data(mydataset)    # doesn't work (data set 'mydataset' not found)
    rules <- apriori(mydataset)
}

изменить - вывод sessionInfo():

> sessionInfo()
R version 3.0.0 (2013-04-03)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] arules_1.0-14   Matrix_1.0-12   lattice_0.20-15 RPostgreSQL_0.4 DBI_0.2-7      

loaded via a namespace (and not attached):
[1] grid_3.0.0  tools_3.0.0

И фактические ошибки, которые я получаю (используя, например, образец данных "xyz" ):

xyz <- data.frame(c(1,2,3))
data(list=xyz)
Warning messages:
1: In grep(name, files, fixed = TRUE) :
  argument 'pattern' has length > 1 and only the first element will be used
2: In grep(name, files, fixed = TRUE) :
  argument 'pattern' has length > 1 and only the first element will be used
3: In if (name %in% names(rds)) { :
  the condition has length > 1 and only the first element will be used
4: In grep(name, files, fixed = TRUE) :
  argument 'pattern' has length > 1 and only the first element will be used
5: In if (name %in% names(rds)) { :
  the condition has length > 1 and only the first element will be used
6: In grep(name, files, fixed = TRUE) :
  argument 'pattern' has length > 1 and only the first element will be used

...

...

32: In data(list = xyz) :
  c("data set ‘1’ not found", "data set ‘2’ not found", "data set ‘3’ not found")

Ответ 1

Я отвечаю на свой вопрос, но наконец нашел решение. Цитирование справки R:

"Наборы данных выполняются во всех загружаемых пакетах, а затем в" каталоге данных (если есть) текущего рабочего каталога ".

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

> write.table(mydataset,file="dataset.csv",sep=",",quote=TRUE,row.names=FALSE)  # I intend to create a csv file, so I use 'sep=","' to separate the entries by a comma, 'quote=TRUE' to quote all the entries, and 'row.names=F to prevent the creation of an extra column containing the row names (which is the default behavior of write.table() )

# Now place the dataset into a "data" directory (either via R or via the operating system, doesn't make any difference):
> dir.create("data")  # create the directory
> file.rename(from="dataset.csv",to="data/dataset.csv")  # move the file

# Now we can finally load the dataset:
> data("mydataset")  # data(mydataset) works as well, but quoted is preferable - less risk of conflict with another object coincidentally named "mydataset" as well

Ответ 2

Используйте аргумент list. См. ?data.

data(list=myvar)

Вам также понадобится myvar для символьной строки.

myvar <- "Titanic"

Обратите внимание, что myvar <- Titanic работал (я думаю) из-за ленивой загрузки набора данных Titanic. Большинство наборов данных в пакетах загружаются таким образом, но для других типов наборов данных вам все равно потребуется команда data.

Ответ 3

Используйте переменную как символ. В противном случае вы будете обрабатывать содержимое "Титаника", а не его имя. Вам также может понадобиться использовать get, чтобы преобразовать значение символа в имя объекта.

myvar <- 'Titanic'

myfun <- function(mydataset) {
    data(list=mydataset)   
    str(get(mydataset))
}

myfun(myvar)

Ответ 4

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

data_object = get(myvar, asNamespace('<package_name>'))

или просто:

data_object = get(myvar)

Ответ 5

Assign_Name <- read.csv(file.choose())

Эта строка кода открывает ваш локальный компьютер, просто выберите набор данных, который вы хотите загрузить его R среда

Ответ 6

Я пытаюсь выполнить SEM с помощью lavaan, но каждый раз, когда я пробую, появляется одно и то же сообщение: Как я могу сделать правильный сценарий? С уважением

набор данных 'mturk2014 не найден