Построить функцию зацикливания и применить не работает. - PullRequest
2 голосов
/ 28 июля 2011

Я очень плохо знаком с R, я хочу запустить определенную функцию (идеально из пакета pscl) для 50 различных данных (класс переклички), которые имеют суффикс от 1 до 50, и я хочу сохранить результаты в объектах также с суффиксом от 1 до 50, но я не могу этого сделать.

Применение не работает, так как мне нужно указать дополнительные параметры в идеальной функции, и я уже пытался создать новую функцию, которая устанавливает дополнительные параметры и позволяет указывать функцию только с данными, но это не удается в второй шаг (не распознает объект).

У меня есть объекты данных для моей функции: rc.1, rc.2, ..., rc.50 И попробуйте сделать следующее - внимательно следя за тем, как бы я это делал в Stata ...

for (i in 1:3) {
    est.leg[i]<-ideal(rc[i], maxiter=1000, burnin=500, thin=10, normalize=TRUE)
}

И он не оценивает в rc [i], говорит "объект 'rc' not found"

Я также пробовал:

loop.ideal<- function(zz){ 
   ideal(zz, d=1, maxiter=100, burnin=50, thin=10, normalize=TRUE)
}

но при тестировании функции она не работает с итерациями.

Я был бы очень признателен за любую помощь !!!!

Ответы [ 2 ]

7 голосов
/ 28 июля 2011

Как говорит Гэвин.

Вы можете зацикливать имена ваших объектов, например:

object.names <- paste("rc",1:50,sep=".")

Лучше научиться работать со списками.Вы можете составить список объектов, используя lapply

object.list <- lapply(object.names,get)

. Этот элемент будет использовать функцию get для каждого имени в списке с именами.lapply возвращает список, поэтому у вас есть список объектов.

Если функция верна, вы можете использовать тот же прием снова для функции ideal:

est.leg <- lapply(object.list,ideal , maxiter=1000, burnin=500, 
                  thin=10, normalize=TRUE)

Это должно дать правильное решение.

3 голосов
/ 28 июля 2011

Вы можете передать дополнительные аргументы apply(), см. Аргумент ... в ?apply.Если то, что вы пишете правильно, у вас нет объектов rc[i], у вас есть rc.i, где i на самом деле является целым числом.[ предназначен для поднабора объекта, поэтому ваш код запрашивает i-й компонент объекта rc.Похоже, вы хотите получить объект с именем rc.i с заменой i на целое число.

Не зная больше о rc и т.д., вы можете попробовать get(paste("rc.", i, sep = "")) вместо rc[i].

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