如何理解R

时间:2016-08-03 19:03:36

标签: r

这里我在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

2 个答案:

答案 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 + 1l分配给l,然后使用[[]]作为d[[l <- l + 1]]的参数{1}}。

所以l <- l + 1 l <- 0 + 1 l <- 1 [l] [[l]] d[[l]] d[[1]] 分解为......

<Provider>