我正在为基本的 R 使用制作一些练习和演示。前一段时间,为了玩一个子集并访问一个对象中的不同元素,我制作了一个练习,它是“尝试更改数组 X 中矩阵 1 的行和列的名称”。
, , 1
[,1] [,2] [,3] [,4] [,5]
[1,] 0.5 0.5 0.5 0.5 0.5
[2,] 0.5 0.5 0.5 0.5 0.5
[3,] 0.5 0.5 0.5 0.5 0.5
[4,] 0.5 0.5 0.5 0.5 0.5
[5,] 0.5 0.5 0.5 0.5 0.5
, , 2
[,1] [,2] [,3] [,4] [,5]
[1,] 4.5 4.5 4.5 4.5 4.5
[2,] 4.5 4.5 4.5 4.5 4.5
[3,] 4.5 4.5 4.5 4.5 4.5
[4,] 4.5 4.5 4.5 4.5 4.5
[5,] 4.5 4.5 4.5 4.5 4.5
当时对我有用的解决方案是:
colnames(ArrayX[,, 1]) <- c(paste("coordX", 1:5, sep = ""))
rownames(ArrayX[,, 1]) <- c(paste("coordY", 1:5, sep = ""))
但是,现在,即使运行时没有返回错误,数组也保持不变....
这里是会话信息:
R version 4.0.4 (2021-02-15)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)
Matrix products: default
locale:
[1] LC_COLLATE=Spanish_Spain.1252 LC_CTYPE=Spanish_Spain.1252 LC_MONETARY=Spanish_Spain.1252 LC_NUMERIC=C
[5] LC_TIME=Spanish_Spain.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RODBC_1.3-17 knitr_1.31 readxl_1.3.1 reshape2_1.4.4 forcats_0.5.1 stringr_1.4.0 dplyr_1.0.5 purrr_0.3.4
[9] readr_1.4.0 tidyr_1.1.3 tibble_3.1.0 ggplot2_3.3.3 tidyverse_1.3.0
loaded via a namespace (and not attached):
[1] Rcpp_1.0.6 plyr_1.8.6 cellranger_1.1.0 pillar_1.5.1 compiler_4.0.4 dbplyr_2.1.0 tools_4.0.4
[8] jsonlite_1.7.2 lubridate_1.7.10 lifecycle_1.0.0 gtable_0.3.0 pkgconfig_2.0.3 rlang_0.4.10 reprex_1.0.0
[15] cli_2.3.1 rstudioapi_0.13 DBI_1.1.1 xfun_0.22 haven_2.3.1 withr_2.4.1 xml2_1.3.2
[22] httr_1.4.2 fs_1.5.0 generics_0.1.0 vctrs_0.3.6 hms_1.0.0 grid_4.0.4 tidyselect_1.1.0
[29] glue_1.4.2 R6_2.5.0 fansi_0.4.2 modelr_0.1.8 magrittr_2.0.1 backports_1.2.1 scales_1.1.1
[36] ellipsis_0.3.1 rvest_1.0.0 assertthat_0.2.1 colorspace_2.0-0 utf8_1.2.1 stringi_1.5.3 munsell_0.5.0
[43] broom_0.7.5 crayon_1.4.1
我很困惑,谢谢

不要在对rownames
(etc) 的调用中使用子集。
ArrayX <- array(1:50, dim=c(5,5,2))
ArrayX
# , , 1
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 6 11 16 21
# [2,] 2 7 12 17 22
# [3,] 3 8 13 18 23
# [4,] 4 9 14 19 24
# [5,] 5 10 15 20 25
# , , 2
# [,1] [,2] [,3] [,4] [,5]
# [1,] 26 31 36 41 46
# [2,] 27 32 37 42 47
# [3,] 28 33 38 43 48
# [4,] 29 34 39 44 49
# [5,] 30 35 40 45 50
colnames(ArrayX) <- paste0("coordX", 1:5)
rownames(ArrayX) <- paste0("coordY", 1:5)
ArrayX
# , , 1
# coordX1 coordX2 coordX3 coordX4 coordX5
# coordY1 1 6 11 16 21
# coordY2 2 7 12 17 22
# coordY3 3 8 13 18 23
# coordY4 4 9 14 19 24
# coordY5 5 10 15 20 25
# , , 2
# coordX1 coordX2 coordX3 coordX4 coordX5
# coordY1 26 31 36 41 46
# coordY2 27 32 37 42 47
# coordY3 28 33 38 43 48
# coordY4 29 34 39 44 49
# coordY5 30 35 40 45 50
我们可以使用dimnames
dimnames(ArrayX) <- list(paste0("coordY", 1:5), paste0("coordX", 1:5), NULL)
-输出,输出
ArrayX
#, , 1
# coordX1 coordX2 coordX3 coordX4 coordX5
#coordY1 0.9450726 1.0642934 1.7164833 -1.1610352 2.6045781
#coordY2 -0.2153065 -0.8209356 1.3052241 -0.5853774 -1.5833918
#coordY3 -1.0333230 0.8766106 -0.5811332 0.9636683 -0.4263902
#coordY4 0.8281970 -1.4391891 0.3491635 0.1239269 0.7396240
#coordY5 -0.2048288 1.1179848 -0.8929726 -1.8674698 -2.0467980
#, , 2
# coordX1 coordX2 coordX3 coordX4 coordX5
#coordY1 0.1121423 -0.3015090 -0.18311717 -1.6025064 0.1504099
#coordY2 1.2635544 -0.1770131 0.37860981 -0.6149095 0.1354814
#coordY3 0.3219548 0.5072806 -0.02555505 -0.4057642 -0.7276835
#coordY4 -0.1939912 -1.0914181 -0.92550545 -0.2285773 -0.6883232
#coordY5 2.1722877 -0.8981309 -2.04296086 1.1754687 -1.3772374
所有元素的属性应该相同。根据?array
“dimnames”属性是可选的:如果存在,则它是一个列表,每个维度都有一个组件,NULL 或该维度的“dim”属性的元素给定的长度的字符向量。
data
set.seed(24)
ArrayX <- array(rnorm(5 * 5 *2), dim = c(5, 5, 2))
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(2条)