2012-02-17 3 views
0

я следующая функция, которая должна быть сведена к минимуму:Extract результаты функции

calloptim <- function(under,strike, rf, ttoe,par) {(-(under*par[1] 
    -strike*exp(-rf*ttoe)*par[2]))^2} 

Я создаю следующий объект:

res<- nlminb(c(1,1), calloptim, under= 90, strike = 100, rf =0.05, ttoe=3) 

res 

$par 
[1] 0.9771973 1.0218072 

$objective 
[1] 3.412923e-16 

$convergence 
[1] 1 

$iterations 
[1] 2 

$evaluations 
function gradient 
     34  4 

$message 
[1] "false convergence (8)" 

Это хорошо, но теперь я хочу, чтобы захватить в $ par оценивают значения и помещают их в вектор, поэтому я могу использовать их для других вычислений.

Как вы изолируете и сохраняете только части результата объекта?

ответ

6

Ниже приведены все примерно эквивалентны:

res$par 
res["par"] 
res[1] 
res[[1]] 

Посмотрите на странице справки ?Extract для деталей. Я часто нахожу поиск полезного объекта str(), когда вы пытаетесь найти, где взять вещи, например, либо имя объекта для извлечения, либо его числовое местоположение внутри объекта, на который вы смотрите (в этом случае 1).

+1

Я бы предположил, что OP предпочтет первый и четвертый из этих параметров ... 'res [[" par "]]' еще одна опция (эквивалентная # 1 и # 4) –

+0

Я бы, вероятно, включил в этот ответ примечание что существует важная разница между 'res [1]' и 'res [[1]]', которая часто является источником путаницы. – joran

+0

Спасибо Чейз! Отлично. – user1181337

1

Потяните $par элемент из res с newVals <- res$par

2

Не знаю, если это точно отвечает на то, что вы просите, но:

vector <- res$par 
> vector 
[1] 0.9771973 1.0218072 
> vector[1] 
[1] 0.9771973 

Там может быть акцесора, что более «правильный «.

+0

Там нет лучшего способа сбруи (хотя это очень хороший вопрос, чтобы рассмотреть). Класс результата 'nlminb()' - 'list'. –

+0

А, спасибо! Наивная ошибка с моей стороны, чтобы не проверить тип вывода. – blake

1

Если это расширение вашего previous question, вы можете извлечь эти вложенные ответы с:

out <- apply(f, 1, nlminb, objective=calloptim, under=90, strike=100, rf=0.05, ttoe=3) 
out.par <- lapply(out, '[',1) 
unlist(out.par, recursive=FALSE) 
+0

Спасибо, Джастин. Это был бы следующий вопрос, чтобы вы читали мои мысли. Перед тем, как опубликовать этот вопрос, я внедрил $ ​​par, и он вернулся NULL. – user1181337

+1

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

+0

Ах, понял, будет делать, и будет проголосовать, когда мой представитель получит до 15. – user1181337

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