質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1080閲覧

【R】多次元配列の定義について

velonica74

総合スコア11

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/12/18 13:00

Rにて、

R

1> array 2[[1]] 3 [1] 0 -1 -2 -3 1 0 -1 -2 2 1 0 -1 3 2 1 0 4 5[[2]] 6 [1] 0 -3 -8 -15 3 0 -5 -12 8 5 0 -7 15 12 7 0 7 8[[3]] 9 [1] 0 -7 -26 -63 7 0 -19 -56 26 19 0 -37 63 56 37 0

となる配列を定義したいと考えています。
現状実装はできており、

R

1array <- list() 2for (k in 1:(r-1)) { 3 tmp <- c() 4 for (i in 1:r) { 5 for (j in 1:r) { 6 tmp <- c(tmp, i^k-j^k) 7 } 8 } 9 array[[k]] <- tmp 10}

にて実現しております。ですがやや冗長な気がしており、tmpがないコードの実装を目指しているのですが、

R

1array <- list() 2for (k in 1:(r-1)) { 3 for (i in 1:r) { 4 for (j in 1:r) { 5 array[[k]] <- append(array[[k]], i^k-j^k) 6 } 7 } 8}

とすると、

array[[k]] でエラー: 添え字が許される範囲外です

となってしまいます。

R

1- array[[k]] <- append(array[[k]], i^k-j^k) 2+ array[[k]] <- 1

とすればエラー自体は出ません。(append)

お力添えいただけますと幸いです。何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

apply系の関数を使うとRっぽくなります。

aa <- lapply( 1:(r-1), function(k){ unlist(lapply( 1:r, function(i){ unlist(lapply(1:r, function(j){i^k-j^k})) } )) } )

投稿2021/12/18 14:41

KojiDoi

総合スコア13692

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

以下は expand.grid を使う方法です。

r

1r <- 4 2array <- do.call(function(j, i, k) i^k - j^k, expand.grid(j=1:r, i=1:r, k=1:(r-1))) 3array <- unname(split(array, rep(1:(r-1), each=r*r))) 4 5print(array) 6 7# 8[[1]] 9 [1] 0 -1 -2 -3 1 0 -1 -2 2 1 0 -1 3 2 1 0 10 11[[2]] 12 [1] 0 -3 -8 -15 3 0 -5 -12 8 5 0 -7 15 12 7 0 13 14[[3]] 15 [1] 0 -7 -26 -63 7 0 -19 -56 26 19 0 -37 63 56 37 0

リストではなく行列(matrix)にする場合は以下になります。

r

1r <- 4 2array <- do.call(function(j, i, k) i^k - j^k, expand.grid(j=1:r, i=1:r, k=1:(r-1))) 3mat <- matrix(array, ncol=r*r, byrow=T) 4 5print(mat) 6 7# 8 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] 9[1,] 0 -1 -2 -3 1 0 -1 -2 2 1 0 -1 3 2 1 0 10[2,] 0 -3 -8 -15 3 0 -5 -12 8 5 0 -7 15 12 7 0 11[3,] 0 -7 -26 -63 7 0 -19 -56 26 19 0 -37 63 56 37 0

投稿2021/12/18 14:25

編集2021/12/19 02:14
melian

総合スコア20655

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

velonica74

2021/12/21 04:37

expand.grid、知りませんでした!ご回答ありがとうございました。勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問