在R中设置3D矩阵并访问某些元素

Fab*_*olz 30 arrays element r

我想在R中设置一个3D矩阵.我想这很简单.但是,到目前为止我还没有找到解决方案.假设我们要创建一个365x6x4矩阵.同样重要的是我如何更改矩阵中的一个条目.假设我们想要将值204分配给元素[304,5,2].我非常感谢你的回答!

谢谢!最好的,F

Hav*_*ock 33

试试这个:

ar <- array(someData, c(365, 6, 4));  
ar[304,5,2] <- 204;
Run Code Online (Sandbox Code Playgroud)

哪里someData可能

someData <- rep(0, 365*6*4);  
Run Code Online (Sandbox Code Playgroud)

甚至可能更好

someData <- rep(NaN, 365*6*4);  
Run Code Online (Sandbox Code Playgroud)

  • 而且,在你提到的情况下,你实际上并不需要`rep`命令 - 复制是自动的.试试吧!:) (4认同)
  • 是的,它在R-speak中称为*recycle*; 较短的物体被循环多次以匹配较长的物体的长度.如果次数是非整数,则会发出有关不兼容长度的警告,但仍会使用回收的对象. (3认同)
  • +1 加文。一个很好的例子是“all(c(1,2)==c(1,2,1,2))”,R 认为这是正确的! (2认同)

And*_*rie 13

矩阵是数组的特殊二维情况.(引自帮助?matrix).

所以,你需要array:

x <- array(rep(1, 365*5*4), dim=c(365, 5, 4))
str(x)
num [1:365, 1:5, 1:4] 1 1 1 1 1 1 1 1 1 1 ...
Run Code Online (Sandbox Code Playgroud)

设置一个特定值:

x[305, 5, 2] <- 204
Run Code Online (Sandbox Code Playgroud)

打印一片:

x[305, , ]
     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    1    1    1    1
[3,]    1    1    1    1
[4,]    1    1    1    1
[5,]    1  204    1    1
Run Code Online (Sandbox Code Playgroud)

  • @TimP它可能是多余的,但代码的作用也很明显.依赖R的行为或特征*X*可能会分散人们试图在答案中说明的真实问题.重点一点就是这个Q的整体内容.做两次看起来很小. (7认同)

Tim*_*m P 5

试试这个简单的例子(让这个例子变得相当小,所以很清楚发生了什么 - 我在下面解释如何根据你的确切问题进行调整!)......

m = array(1:60, dim=c(3,4,5))

m[2,1,5]
[1] 50

m[2,1,5] = -50

m[2,1,5]
[1] -50
Run Code Online (Sandbox Code Playgroud)

键入m以查看整个3d数组:)

在你的例子中,你将你的初始数组设置为m = array(NA, dim=c(365,6,4))(这将填充NA以开始 - 你有数据填充它吗?)m[304,5,2] = 204当然,赋值是:)