R新手:如何从一组坐标向量创建数组?

R新手:如何从一组坐标向量创建数组?,r,vector,multidimensional-array,coordinates,R,Vector,Multidimensional Array,Coordinates,假设我在三维空间的不同位置进行了一组测量。测量的位置具有坐标向量 x <- c(0,1,2,3) y <- c(4,5,6) z <- c(7,8) 但我怀疑我“在NetCDF中思考”的时间太长了:基本上我想在上面做的是分配给一个数组,我不相信在R中可以做到这一点。#开始数据 # starting data x <- c(0,1,2,3) y <- c(4,5,6) z <- c(7,8) # find every combo w <- expand

假设我在三维空间的不同位置进行了一组测量。测量的位置具有坐标向量

x <- c(0,1,2,3)
y <- c(4,5,6)
z <- c(7,8)
但我怀疑我“在NetCDF中思考”的时间太长了:基本上我想在上面做的是分配给一个数组,我不相信在R中可以做到这一点。

#开始数据
# starting data
x <- c(0,1,2,3)
y <- c(4,5,6)
z <- c(7,8)

# find every combo
w <- expand.grid( x , y , z )

# convert to a matrix
v <- as.matrix( w )

# view your result
v

或者,这也可能有帮助。请澄清您的期望结果:)

#开始数据

他试图制作一个3D阵列,而不是2D矩阵。这个答案和上面的评论都没有抓住要点。@bnaul我也很困惑,什么样的3D数组可以用9个值来构造…@bnaul,OP说:
上面看起来不错。我不能用…
将它从data.frame转换到数组,他最后的问题也没有谈到它。@Arun是的,我只是想决定应该相信哪种说法:他们想要一个3D数组,或者expand.grid的输出看起来是正确的。这两个看起来是矛盾的…@joran,我有点理解他想要点(在3D空间中)在一个数组中。除了可能是
数组(0,dim=c(4,3,2))
然后开始填充值之外,我无法理解其他情况。你能描述一下你打算如何使用这个数组吗?如果您正在存储测量值,那么3D阵列是合适的;如果你只是想得到一个坐标列表,那么正如@Arun和Anthony所建议的那样,你可以使用一个2D矩阵,其中每行包含一个(x,y,z)元组。与其首先制作一个满是
NA
s的数组,不如将向量和你的值放在一起,x变化最快,然后是y,那么z.@cbeleites,在我们得到一个修改后的问题之前,我不会做任何其他事情;)我的意思是为了汤姆罗什,不是为了你。我写的答案基本上和你写的一样,但第一行的问题是他想填写什么…@cbeleites ah gotcha抱歉:)没问题,我应该把评论发给TomRoche。
# starting data
x <- c(0,1,2,3)
y <- c(4,5,6)
z <- c(7,8)

# find every combo
w <- expand.grid( x , y , z )

# convert to a matrix
v <- as.matrix( w )

# view your result
v
# starting data
x <- c(0,1,2,3)
y <- c(4,5,6)
z <- c(7,8)

# create a 4 x 3 x 2 array
v <- 
    array( 
        # start out everything as missing..
        NA , 
        # ..and make the lengths of the dimensions the three lengths.
        dim = 
            c( length( x ) , length( y ) , length( z ) ) 
    )

# view your result
v

# now populate it with something..
# for now, just populate it with 1:24
v[ , , ] <- 1:length(v)

# view your result again
v
 array(NA, dim=c(4,3,2), 
   dimnames=list( x = c(0,1,2,3),
     y = c(4,5,6),
     z = c(7,8) ) )
, , z = 7

   y
x    4  5  6
  0 NA NA NA
  1 NA NA NA
  2 NA NA NA
  3 NA NA NA

, , z = 8

   y
x    4  5  6
  0 NA NA NA
  1 NA NA NA
  2 NA NA NA
  3 NA NA NA