私はオブジェクトを含む配列を処理しています。 2つの異なる配列の要素を比較すると、cell_list [x4、3、1]にエラーとしてエラーが発生しています:次元数が正しくありません。コードの一部は次のとおりです。配列の要素にアクセスするには?
cnt2 <- 25
cell_list <- array(0, c(cnt2,6,1))
nbr_list <- array(0, c(25,6,1))
insert_nbrlist = function(nbr_list, cell_list, cnt1)
{
for(x3 in 1:cnt1)
for(x4 in 1:cnt2)
{
if((nbr_list[x3,3,1] == cell_list[x4,3,1]) && (nbr_list[x3,4,1]== cell_list[x4,4,1]))
{
theta_diff <- cell_list[x4,1,1] - nbr_list[x3,1,1]
phi_diff <- cell_list[x4,2,1] - nbr_list[x3,2,1]
}
else
{
cnt2 <- cnt2+1
cell_list <- rbind(cell_list[,,1],nbr_list[x3,,1])
}
}
return(cell_list)
}
ここで、insert_nbrlistはメインプログラムによって呼び出される関数です。 Inner forループは1回実行されますが、2回目の実行時、つまりx4 = 2の場合、cell_list [x4,3,1]のエラー:[次元数が正しくありません]というエラーが表示されます。誰でも私を助けてくれますか? ここで、cnt1は関数insert_nbrlistに渡されます。 cnt1は、nbr_listのtable1に存在する行数で、定数です。 cnt2はcell_listのtable1に存在する行の数を表し、増加を続けます。私は関数に渡されていません、その関数で増加しているので。関数を呼び出すとエラーは発生しませんが、エラーは関数insert_nbrlist内で生成されます。
私は別の方法でこの質問をしたいと思います。私はcell_list < - array(0、c(25,6,1))に初期化されている配列を持っています。プログラムでは、cell_listのこのtable1にもう一つの行を追加しています。その配列から行を追加した後に配列から要素にアクセスする方法
この問題を解決するには、次のようなエラーが発生しています:cell_list [x4、3、1]のエラー。私は、簡単なコードを追加したいメインプログラム
func <- function()
{
cnt2 <- 25
insert_nbrlist = function(nbr_list, cell_list)
{
for(x3 in 1:25)
for(x4 in 1:cnt2)
{
if((nbr_list[x3,3,1] == cell_list[x4,3,1]) && (nbr_list[x3,4,1]== cell_list[x4,4,1]))
{
theta_diff <- cell_list[x4,1,1] - nbr_list[x3,1,1]
phi_diff <- cell_list[x4,2,1] - nbr_list[x3,2,1]
}
else
{
cnt2 <- cnt2+1
cell_list <- rbind(cell_list[,,1],nbr_list[x3,,1])
}
}
return(cell_list)
}
cnt <- 0
m <- 50
r1 <- 10
dtheta <- 0.5
dphi <- 0.5
cell_list <- array(0, c(cnt2,6,1))
nbr_list <- array(0, c(25,6,1))
repeat
{
cnt <- cnt+1
s <- runif(2,-pi/2 : pi/2)
theta <- s[1]
phi <- s[2]
cnt1 <- 0
for(x1 in -2:2)
for(x2 in -2:2)
{
cnt1 <- cnt1+1
theta1 <- theta+x1*dtheta
phi1 <- phi +x2*dphi
x <- round(r1*(sin(theta1) + sin(theta1+phi1))+m/2, digits=0)
y <- round(r1*(cos(theta1)+ cos(theta1+phi1))+m/2,digits=0)
if((theta1 == theta) && (phi1 == phi))
nbr_list[cnt1,,1] <- c(theta1, phi1, x, y, 1,1)
else
nbr_list[cnt1,,1] <- c(theta1, phi1, x, y, 1,0)
}
if(cnt==1)
cell_list <- nbr_list
else
cell_list <- insert_nbrlist(nbr_list, cell_list)
if(cnt == 50)
break
}
}
func()
でコードを書き換えています。
test<- function()
{
sink("G:/rvma/test/test",append=FALSE)
nbr_list <- array(0, c(5,5,1))
nbr_list[1,,1] <- 15
nbr_list[2,,1] <- -15
print(nbr_list)
n <- c(1,2,3,4,5)
nbr_list <- rbind(nbr_list[,,1],n)
print(dim(nbr_list))
print(nbr_list)
print(nbr_list[,,1])
sink()
}
rbindの前に配列の要素にアクセスすることができます。 rbindの配列が5X5X1から6X5X1に変更された後、print(nbr_list)を指定すると配列を出力できますが、print(nbr_list [,, 1])を指定すると同じ配列を出力できません。ここでは、nbr_list [、、1]のエラーErrorを取得しています:次元数が正しくありません。 rbindの後も要素にアクセスできません。
「cnt1」とは何ですか?そしてなぜそれが 'insert_nbrlist'に渡されないのですか? 'insert_nbrlist(nbr_list、cell_list、cnt1、ctn2)'というエラーを生成する関数の呼び出しですか? – Qaswed
お読みください:[すばらしいR再現可能な例を作成するには?](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) –
@aichao 1.右今私は25行6列の1次元配列を使用しています。この1番目のテーブルの後の行数が増えます。 2.後で私は多次元配列 – Aparanji