我正在运行一些模拟测试,其中我在相应的范围内改变两个参数(“x”和“y”)中的每一个,然后计算每个参数组合的结果错误分数。我运行了很多次这个模拟,我想在西姆斯中可视化每个x/y组合的错误分数分布。
下面的代码实现了这一点,但是我创建长格式数据框(用于ggplot)的方式 * 方式 * 太过笨拙和“手动”。是的,我使用了一种模式来从数组维度创建x,y和z长格式列值。但是,唉!
(Also,当我通过向量转换将数组转换为长格式 Dataframe 时,我丢失了数组的维度名称。)
### Create a 3D array of "errors"
# - The first two dimensions are for variation across params "x" and "y"
# - The third dimension, "z", represents sim runs for each x/y combination
dims <- c(2, 3, 50)
# The means around which my simulated errors will vary
errorMeans <- 1:(prod(dims[1:2]))
# Generate "errors" (varying around the errorMeans)
errorVec <- rnorm(prod(dims), mean=errorMeans, sd=0.4)
# My "starting point": A 2D array of error scores, across sims (the 3rd dim)
errorArray <- array(errorVec,
dims,
dimnames=list(x=1:dims[1], y=1:dims[2], z=1:dims[3]))
### Create a long-form data frame from the 3D array
# Read the array into a vector
errorVec <- as.vector(errorArray)
# Write the vector to a long-form data frame (my approach: ugh!)
dfLong <- data.frame(error=errorVec,
x=rep(1:dims[1], prod(dims[2:3])),
y=rep(rep(1:dims[2], each=dims[1]), dims[3]),
z=rep(1:dims[1], each=prod(dims[2:3])))
### Create a faceted histogram plot, showing error variation across the sims (the 3rd dim, "z")
plt <- ggplot(data=dfLong, aes(x=error)) +
geom_histogram(fill="steelblue") +
facet_grid(vars(x), vars(y))
plot(plt)
Faceted histogram of variation in array dimension "z" for all combinations of dimensions "x" and "y"
一定有一种方法可以使用,比如说,dplyr的pivot_longger(),我只是不知道如何从一个(3D)数组和一个矩阵中使用它。
2条答案
按热度按时间6jjcrrmo1#
尝试:
这将减少对象的维度并将其添加为列:
zf9nrax12#
这里有一个方法,在代码中注解。
创建于2023-04-07带有reprex v2.0.2