2013-06-10 2 views
0

Я генерирую 100 случайных чисел из дистрибутива Дирихле, а затем мне нужно использовать вывод для генерации из Gamma distribution. Вот код:Ошибка с sapply в R

a <- rdirichlet(100, c(1,1,1)) 
b <- c(3,3,3) 

sapply(a, function(x) {rgamma(100, shape=2, rate =(b%*%a)) }) 

Здесь следует отметить, что скорость для гаммы-распределения является скалярным произведением векторов Ь и а (который является выходом из Дирихля).

Я получаю сообщение об ошибке:

Error in b %*% a : non-conformable arguments 
+1

'sapply' применяет функцию к каждому элементу. Вы не используете его правильно. –

+0

@ Роман Луштрик: Я считаю, что проблема заключается в умножении b% *% a. Вы знаете, как получить точечный продукт здесь? Благодаря! – user9292

ответ

1

я подозреваю, вы хотите. Моя библиотека имеет по крайней мере четыре различных пакетов с rdirichlet функциями.):

library(MCMCpack) 
apply(a, 1, function(x) {rgamma(100, shape=2, rate =(b %*% x)) }) 

Когда векторы передаются% *%, то должен быть одинаковая длина и sapply проезжали отдельные элементы, а не длина 3 ряда. (Вы также не было "х" в выражении.)

c(3,3,3) %*% 1 
#Error in c(3, 3, 3) %*% 1 : non-conformable arguments 

str(a %*% b) 
# vectors can be assumed to be column matrices in the second position 
num [1:100, 1] 3 3 3 3 3 3 3 3 3 3 ... 

ИЛИ:

> str(b %*% t(a)) 
# .... or assumed to be row matrices in the first position. 
num [1, 1:100] 3 3 3 3 3 3 3 3 3 3 ... 
+0

, когда я запускаю этот код, вывод матрицы 100x100, но я считаю, что он должен быть 100x1. – user9292

+0

Почему? Вы просите 100 случайных гамма-ничьих с каждой новой строкой от «a». –

+0

Да. Я хочу, чтобы результат этого (b% *% a) был единственным числом, и поэтому, когда я генерирую из гаммы, я получу 100 чисел. – user9292

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