【发布时间】:2020-02-25 14:37:53
【问题描述】:
我想使用嵌套循环创建一个三维数组,问题是循环似乎不起作用。 代码是:
s = array(NA,dim=c(5,5,4),dimnames=list(0:4,0:4,1:4))
for (i in 1:4)
{
for (j in 0:i )
{
for (k in 0:i)
{
s[j,k,i]=(j+i+k)
}
}
}
我希望矩阵中的每个元素(例如元素(j,k,i)都可以是(j + k + i),但是最终结果中有很多NA,我该如何更改我的代码来实现它工作吗?
【问题讨论】:
-
(1) 当您使用
[j,k,i]进行索引时,您将索引数字列,而不是您分配的名称。如果你想使用名字,它们必须是字符,例如s[as.character(j),as.character(k),as.character(i)](这将解决"0"飞机被错过的问题。(2)NAs的其余部分是因为你的循环。你期待吗零? -
(换句话说,
s[1,1,1]是在每个轴的第一个位置抓取第一个单元格,而s["1","1","1"]是根据您的暗角抓取第二行、第二列、第一个 z 平面-名称。) -
谢谢你的回答,因为这个数组会组成三个矩阵,我希望第一个矩阵,第1行和第2列的元素是0+1+1(j=0,k=1 ,i=1),但我编写的循环创建了一个 NA。
-
我认为你错过了我的观点。行
1、列2、平面1中的元素与行"1"、列"2"、平面"1"中的元素不同。当您使用字符串而不是数字时,它对我来说很好。 (s[1,2,1] == 2对我来说是真的。)