这个R表达式做什么?
这个R表达式做什么?,r,R,sp_full_in是矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 0 1 1 1 1 2 2 2 1 1 1 1 1 2 1 1 1 1 1 1 2 2 1 0 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 3 2 2 0 2 2 2 2 2 2 1 1 2 2 2 1 2 1 1 1 2 1 4 1 2
sp_full_in
是矩阵:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
1 0 1 1 1 1 2 2 2 1 1 1 1 1 2 1 1 1 1 1 1 2
2 1 0 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1
3 2 2 0 2 2 2 2 2 2 1 1 2 2 2 1 2 1 1 1 2 1
4 1 2 1 0 2 2 2 1 2 1 1 1 2 2 1 2 1 1 2 2 1
5 2 2 2 2 0 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 2
6 2 1 1 1 1 0 1 1 1 2 2 2 2 2 1 2 1 2 2 1 1
7 2 1 1 2 1 1 0 1 1 2 1 1 2 1 1 2 1 1 1 2 1
8 1 2 1 1 1 2 2 0 1 1 1 2 2 2 1 2 1 1 2 1 1
9 2 2 1 2 1 1 2 2 0 1 1 2 1 2 1 2 1 1 2 2 2
10 2 2 1 1 1 2 2 1 1 0 2 2 2 2 1 1 1 1 1 2 2
11 2 2 1 1 1 2 1 1 1 1 0 2 1 2 1 2 1 1 1 1 2
12 1 2 1 1 2 1 1 2 1 1 1 0 2 2 1 2 1 2 1 1 1
13 2 2 2 2 1 3 2 2 2 1 1 3 0 2 1 2 2 1 2 2 2
14 2 2 1 2 1 2 1 2 1 2 2 2 1 0 1 2 1 1 1 1 1
15 2 2 2 2 2 2 2 2 2 1 1 2 2 1 0 2 1 1 1 1 2
16 1 2 2 1 1 2 2 2 1 1 2 2 2 2 1 0 1 1 2 1 2
17 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 2 0 2 2 1 1
18 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 2 0 1 1 1
19 2 2 1 2 1 2 2 2 2 1 1 2 2 2 1 2 1 1 0 2 2
20 2 2 1 1 1 2 2 2 2 1 2 2 2 2 1 2 1 1 1 0 1
21 1 1 1 1 1 1 1 1 1 2 2 1 2 1 1 2 1 1 2 1 0
mean(sp_full_in[which(sp_full_in != Inf)])
生成结果[1]1.38322
我不太确定我是否理解它的作用,但我阅读它的方式是:对于sp_full_in中的每个单元格,检查它是否是无限的,如果是,返回输出1,然后平均所有输出。对吗?如果没有,它应该如何准备?(sp_full_in!=Inf)
返回整数向量(其中只有一个是1)。然后将该整数向量交给“[”,作为sp_full_in
的索引,并将sp_full_in
的所有值作为向量返回给mean
函数
学习从“由内而外”读取R表达式是一个好主意。找到最里面的函数调用并在心里对其求值,在本例中为sp_full_in!=Inf
,它返回传递给which()的所有TRUE的逻辑矩阵由于没有'arr.ind'参数,它返回一个索引的原子向量。其中(sp_full_in!=Inf)
返回一个整数向量(其中只有一个是1)。然后将该整数向量交给“[”as索引到sp_full_in
中,并返回sp_full_in
中的所有值,作为传递给mean
函数的向量
学习从“由内而外”读取R表达式是一个好主意。找到最里面的函数调用并在心里对其求值,在本例中为sp_full_in!=Inf
,它返回传递给which()的所有TRUE的逻辑矩阵
,由于没有'arr.ind'参数,它返回一个索引的原子向量。否,但当它应用于矩阵时,它会根据条件检查矩阵的每个单元格,这里不是Inf。返回满足条件的所有单元格的索引,然后根据代码输出单元格的值根据返回的索引并最终计算这些索引的平均值。否,但您很接近,当它应用于矩阵时,它会根据条件检查矩阵的每个单元格,这里不是Inf。返回满足条件的所有单元格的索引,然后根据您的代码,根据ret输出单元格的值翻转索引并最终计算它们的平均值。其他答案很好地解释了为什么要得到矩阵中所有有限项的平均值,但值得注意的是,在这种情况下,哪个什么都不做。我过去也有过度使用哪个的坏习惯
> a <- matrix(rnorm(4), nrow = 2)
> a
[,1] [,2]
[1,] 0.5049551 -0.7844590
[2,] -1.7170087 -0.8509076
> a[which(a != Inf)]
[1] 0.5049551 -1.7170087 -0.7844590 -0.8509076
> a[a != Inf]
[1] 0.5049551 -1.7170087 -0.7844590 -0.8509076
> a[1] <- Inf
> a
[,1] [,2]
[1,] Inf -0.7844590
[2,] -1.717009 -0.8509076
> a[which(a != Inf)]
[1] -1.7170087 -0.7844590 -0.8509076
## Similarly if there was an Infinite value
> a[a != Inf]
[1] -1.7170087 -0.7844590 -0.8509076
>a
[,1] [,2]
[1,] 0.5049551 -0.7844590
[2,] -1.7170087 -0.8509076
>a[哪个(a!=Inf)]
[1] 0.5049551 -1.7170087 -0.7844590 -0.8509076
>a[a!=Inf]
[1] 0.5049551 -1.7170087 -0.7844590 -0.8509076
>a[1]a
[,1] [,2]
[1,]Inf-0.7844590
[2,] -1.717009 -0.8509076
>a[哪个(a!=Inf)]
[1] -1.7170087 -0.7844590 -0.8509076
##同样,如果有一个无穷大的值
>a[a!=Inf]
[1] -1.7170087 -0.7844590 -0.8509076
而且,当我们讨论它时,我们还应该提到函数is.finite
,它通常比!=Inf
is更可取。finite
将在Inf
、-Inf
、NA
和NaN上返回FALSE
,其他答案很好地解释了为什么你会得到所有f的平均值初始化矩阵中的条目,但值得注意的是,在这种情况下,which
什么都不做。我过去也有过度使用which
的坏习惯
> a <- matrix(rnorm(4), nrow = 2)
> a
[,1] [,2]
[1,] 0.5049551 -0.7844590
[2,] -1.7170087 -0.8509076
> a[which(a != Inf)]
[1] 0.5049551 -1.7170087 -0.7844590 -0.8509076
> a[a != Inf]
[1] 0.5049551 -1.7170087 -0.7844590 -0.8509076
> a[1] <- Inf
> a
[,1] [,2]
[1,] Inf -0.7844590
[2,] -1.717009 -0.8509076
> a[which(a != Inf)]
[1] -1.7170087 -0.7844590 -0.8509076
## Similarly if there was an Infinite value
> a[a != Inf]
[1] -1.7170087 -0.7844590 -0.8509076
>a
[,1] [,2]
[1,] 0.5049551 -0.7844590
[2,] -1.7170087 -0.8509076
>a[哪个(a!=Inf)]
[1] 0.5049551 -1.7170087 -0.7844590 -0.8509076
>a[a!=Inf]
[1] 0.5049551 -1.7170087 -0.7844590 -0.8509076
>a[1]a
[,1] [,2]
[1,]Inf-0.7844590
[2,] -1.717009 -0.8509076
>a[哪个(a!=Inf)]
[1] -1.7170087 -0.7844590 -0.8509076
##同样,如果有一个无穷大的值
>a[a!=Inf]
[1] -1.7170087 -0.7844590 -0.8509076
而且,当我们讨论它时,我们还应该提到函数is.finite
,它通常比!=Inf
is更可取。finite
将在Inf
上返回FALSE
,-Inf
,NA
和计算所有非Inf值的平均值。换句话说,它是查找所有非Inf值并计算其平均值。它计算所有非Inf值的平均值。换句话说,它查找所有非Inf值并计算其平均值。谁说“不,但你很接近”参考?这是一种模糊的通信方式,在一个基于投票重新配置自身的线程中。好的,“它”将为您提供索引。根据索引,您可以检索值并获得其平均值。“不,但您很接近”是指谁?这是一种模糊的通信方式,在一个基于投票重新配置自身的线程中。好的,“which”将为您提供索引。根据索引,您可以检索值并获得其平均值。