adhdpj
@adhdpj (hi ji)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Rのoptim関数のエラーで"次元数が正しくありません"と表示されます。

Q&A

解決したいこと

Rのoptim関数で、"次元数が正しくありません"とエラーが出ます。解決方法を教えてください。

発生している問題・エラー

"次元数が正しくありません" or "incorrect number of dimensions"

例)

該当するソースコード

言語名 R
optim.fun1 <- function(g){    #gもpも5行1列のベクトル 
  return(function(p){           #gを後でoptim関数に代入してpを求める
    p1 <- p[1]
    p2 <- p[2]
    p3 <- p[3]
    p4 <- p[4]
    p5 <- p[5]

    ki <- matrix(c(1,1,2,2,3),nrow=5,ncol=1)
    ma <- matrix(c("a","b","a","a","c"),nrow=5,ncol=1)
    da1 <- cbind(ki,ma)

    si <- matrix(c(1,2,3,4,5),nrow=5,ncol=1)
    xi <- matrix(c(6,7,8,9,10),nrow=5,ncol=1)
    p1 <- sum(matrix(p,nrow=5,ncol=1))
    g1 <- sum(matrix(g,nrow=5,ncol=1))
    da2 <- sum(cbind(si,xi,p1,g1))

L <- matrix(1:5, nrow=5, ncol=5)
for( j in 1:5){
  for( i in 1:5){
    L[i,j] <- ifelse(i == j, sum(da2[i,1]*da2[i,2]*da2[i,3]*da2[i,4]),
                          ifelse(i != j && da1[i,2] == da1[j,2] && da1[i,1] == da1[j,1], sum(2*da2[i,3]),
                                 ifelse(i != j && da1[i,2] == da1[j,2] && da1[i,1] != da1[j,1],sum(3*da2[i,4]) ,0)))
  }
}
print(L)
  })
}


optim(c(1,1,1,1,1),optim.fun1(c(2,2,2,2,2)))

自分で試したこと

いろいろとやってはいるのですが、次元数の違いについてエラー解決できませんでした。

0

1Answer

da2 <- sum(cbind(si,xi,p1,g1))
print(da2)

としてみればわかりますが、da2はスカラーの130ですよ。

da2[i,1] のように配列として参照できるものではありません。

あなたのやりたいことをフォローするのはたいぎなので、どこをどう直したら良いかを特定するのは勘弁してください。

エラーが起きたとき、その前後に print() を入れて変数の内容を表示させてみると良いでしょう。

RStudio だと、Environment ウインドウにそれぞれの変数の内容が表示されるのでそれも参考にできるでしょう。

0Like

Your answer might help someone💌