这里我在R下面有一个简单的函数是:
no.dimnames <- function(a) {
## Remove all dimension names from an array for compact printing.
d <- list()
l <- 0
for(i in dim(a)) {
d[[l <- l + 1]] <- rep("", i)
}
dimnames(a) <- d
a
}
此功能的目标是删除所有阵列名称。但是,我不知道以下索引是做什么的。
d[[l <- l + 1]]
在这种情况下,d最初是一个空列表,而l&lt; - 0那么d [[0 < - 1]]意味着什么?
> x <- matrix(sample(1:5,20,replace=TRUE),nrow = 5)
> x
[,1] [,2] [,3] [,4]
[1,] 5 4 5 3
[2,] 2 1 5 1
[3,] 1 3 4 4
[4,] 3 1 4 3
[5,] 5 3 5 5
> no.dimnames(x)
5 4 5 3
2 1 5 1
1 3 4 4
3 1 4 3
5 3 5 5
答案 0 :(得分:1)
看起来您理解增量代码d[[l <- l + 1]]
,但仍在询问空格rep("", i)
。他们正在用空格替换维名称。 i
用于指示所需的空间量。
如果我们有4x5矩阵。我们将有四个行名和五个列名。要使它们全部为空白,我们需要行rep("", 4)
中的四个空格和rep("", 5)
列中的五个空格。该守则旨在实现这一目标:
mat <- matrix(1:20, 4,5)
rownames(mat) <- month.abb[1:4]
colnames(mat) <- letters[1:5]
mat
# a b c d e
# Jan 1 5 9 13 17
# Feb 2 6 10 14 18
# Mar 3 7 11 15 19
# Apr 4 8 12 16 20
dimnames(mat)
# [[1]]
# [1] "Jan" "Feb" "Mar" "Apr"
#
# [[2]]
# [1] "a" "b" "c" "d" "e"
#What we need
list(rep("", 4), rep("", 5))
# [[1]]
# [1] "" "" "" ""
#
# [[2]]
# [1] "" "" "" "" ""
dimnames(mat) <- list(rep("", 4), rep("", 5))
mat
#
# 1 5 9 13 17
# 2 6 10 14 18
# 3 7 11 15 19
# 4 8 12 16 20
答案 1 :(得分:0)
d[[0<- 1]]
无效......您说0
设置为1
,这是无法完成的。在这种情况下,l
设置为l + 1
,最初为0
,因此l <- 0 + 1
忘记a
是什么或它可能是什么。
只需将此键入Rstudio或您正在使用的w / e,您将看到如果检查每个变量会发生什么。
> d <- list()
> l <- 0
> d[[l <- l + 1]] <- rep("", 1)
> d
> l
我应该解释的一部分就是在这种情况下,当您键入d[[l <- l + 1]]
时,l + 1
将l
分配给l
,然后使用[[]]
作为d[[l <- l + 1]]
的参数{1}}。
所以l <- l + 1
l <- 0 + 1
l <- 1
[l]
[[l]]
d[[l]]
d[[1]]
分解为......
<Provider>