2014-01-16 3 views
0

Я не знаю, возможно ли то, что я пытаюсь сделать! У меня есть матрица значений (Var_sim), и я преобразовываю ее как объект ff. Имя этого объекта создается с помощью «paste». Теперь я хочу использовать этот объект в функции ffload, это мой код:Используйте переменную с созданным именем в функции

Variables[k] = TEMP 
Cell_number[i] = 4095 
selected_domains = 1 

assign(paste("Mat_",Variables[k],"_",Cell_number[i],"_",selected_domains[j],sep=""),as.ff(Var_sim)) 

Здесь я имею переменную Mat_TEMP_4085_1 как объект ТФ. Я использую, что в цикле так что я буду иметь различные Ф.Ф. объекты с разными именами (разные cell_number) .Я нужно использовать Mat_TEMP_4085_1 (и другие) в функции, но я не могу просто написать имя:

ffsave(as.name(paste("Mat_",Variables[k],"_",Cell_number[i],"_",selected_domains[j],sep="")), file="Test") 

у меня есть следующее сообщение об ошибке:

Error in ffsave(as.name(paste("Mat_", Variables[k], "_", Cell_number[i], : 
objet ‘as.name(paste("Mat_", Variables[k], "_", Cell_number[i], "_",  selected_domains[j], sep = ""))’ not found 

Он не распознает переменную. Как я могу сделать?

+0

Что все это «ff»? Из пакета? Кроме того, создание имен и использование назначений почти всегда неверно и, вероятно, является причиной вашей проблемы. Сделайте _lists_ вещей, а не пытайтесь помещать индексы в имена вещей. – Spacedman

+0

Да ff - это пакет, и я использую его, потому что я работаю с большими данными. Функция будет записывать каждый файл ff в папку, после чего я могу перезагрузить их и использовать одну матрицу на единицу. Проблема в том, что когда я загружаю объект ff, имя переменной - это имя объекта, сохраненного в ffsave. Если я ставил всегда одно и то же имя, и я хочу загрузить несколько ff objets, переменная будет перезаписана, потому что это будет одно и то же имя. – Douie

+0

Вы можете использовать аргумент 'envir' для загрузки каждого из них в другую среду и составить список из них. – Spacedman

ответ

0

похоже, что вы используете as.name справа. Просто удалите его или оберните вокруг него as.character, если вы хотите получить значение переменной из имени строки переменной get; @Spacedman прав, вы должны предпочесть списки имен, если сможете.

tt = "rbind" 
print(do.call(tt,list(LETTERS))) # works 
print(do.call(as.name(tt),list(LETTERS))) # does not work 
print(do.call(as.character(as.name(tt)),list(LETTERS))) # works 
print(do.call(get("tt"),list(LETTERS))) # works 
+0

Спасибо за ваш ответ. Независимо от того, что я пытаюсь, я все еще имею ту же ошибку (get, as.character (as.name()) или juste paste()). Когда я просто печатаю код, он дает мне имя, которое я хочу, но когда мне нужно использовать его в функции, он не распознает его – Douie

+0

Я посмотрел на ffsave, похоже, вам нужно указать список имен: 'require (ff); n <- 8e3; Назначить (вставить (вставить (LETTERS [1: 3], collapse = ""), ff (sample (n, n, TRUE), vmode = "integer", length = n, filename = "~/test/ABC.ff")); ffsave (list = paste (LETTERS [1: 3], collapse = ""), file = "~/test/another_ABC") ' –

+0

Спасибо, это работает! Мне нужен «список». Имена задаются аргументами, введенными пользователем в функцию. Я могу иметь почти 500 000 имен из разных комбинаций параметров - я думаю, что сложнее использовать список имен – Douie

Смежные вопросы