當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R sparseVector-class 稀疏向量類


R語言 sparseVector-class 位於 Matrix 包(package)。

說明

稀疏向量類:虛擬母類 "sparseVector" 有五個實際子類 "dsparseVector""isparseVector""lsparseVector""nsparseVector""zsparseVector" ,其中我們主要實現了 d* 的方法、l*n*

插槽

length

"numeric" - 稀疏向量的length。請注意,"numeric" 可以故意大於最大值 "integer".Machine$integer.max

i

"numeric" - 非零條目的(從 1 開始)索引。不能是NA並且嚴格遞增排序。

請注意, "integer" 是 “part of” "numeric" ,並且可以(並且通常會)用於非大型稀疏向量。

x

(對於除 "nsparseVector" 之外的所有內容):非零條目。這是類 "numeric" 的類 "dsparseVector""logical" 的類 "lsparseVector" 等。

請注意,"nsparseVector" 沒有 x 插槽。此外,主要是為了便於方法定義,我們將具有 x 槽的所有稀疏向量類的類並集(參見 setClassUnion )定義為類 "xsparseVector"

方法

長度

signature(x = "sparseVector") :簡單地提取length 槽。

展示

signature(object = "sparseVector"):稀疏向量的show方法使用非導出的prSpVector函數將“structural”零打印為".",該函數允許進一步定製,例如用" "(空白)替換"."

請注意,options(max.print) 將影響打印大型稀疏向量的條目數量。

as.vector

signature(x = "sparseVector", mode = "character") 將稀疏向量強製為 “regular”,即原子向量。這與 as(x, "vector") 相同。

作為

..:參見下麵的coerce

強製

signature(from = "sparseVector", to = "sparseMatrix"), 和

強製

signature(from = "sparseMatrix", to = "sparseVector")等:對稀疏矩陣的強製轉換(sparseMatrix)的提供和工作方式與標準類似R,即向量被強製轉換為 1 列矩陣。

暗淡<-

signature(x = "sparseVector", value = "integer") 將稀疏向量強製轉換為稀疏矩陣,即繼承自 sparseMatrix 的適當維度的對象。

signature(x = "sparseVector"): 與R的(包util)head,head(x,n)(為了 )相當於x[1:n],但這裏可以更有效,請參閱示例。

尾巴

signature(x = "sparseVector") :類似於 head ,見上文。

托普利茨

signature(x = "sparseVector") :作為 toeplitz(x) ,從 x 生成 Toeplitz 矩陣,其中 n = length(x)

代表

signature(x = "sparseVector") 重複 x ,使用相同的參數列表 (x, times, length.out, each, ...) 作為 rep() 的默認方法。

哪一個

signature(x = "nsparseVector")

哪一個

signature(x = "lsparseVector") 返回非零條目的索引(這對於稀疏向量來說很簡單)。

行動

signature(e1 = "sparseVector", e2 = "*") :定義算術、比較和邏輯運算(參見Ops)。

概括

signature(x = "sparseVector") :定義所有Summary 方法。

[

signature(x = "atomicVector", i = ...):您不僅可以使用稀疏向量i對sparseVectors x[i]進行子集化(又名“index into”),而且我們還支持通過邏輯稀疏向量對傳統向量x進行高效子集化。 (即類 "nsparseVector""lsparseVector"i )。

is.na,is.finite,is.infinite

(x = "sparseVector")

is.na,is.finite,is.infinite

(x = "nsparseVector"): 返回logical或者"nsparseVector"與相同長度x,表示是否/何處xNA(或者NaN),有限或無限,完全類似於相應的基數R職能。

c.sparseVector()是適用於所有的 S3 方法"sparseVector"s,但自動分派僅發生在第一個參數上,因此它也可以像常規一樣有用R函數,請參閱示例。

例子


getClass("sparseVector")
getClass("dsparseVector")
getClass("xsparseVector")# those with an 'x' slot

sx <- c(0,0,3, 3.2, 0,0,0,-3:1,0,0,2,0,0,5,0,0)
(ss <- as(sx, "sparseVector"))

ix <- as.integer(round(sx))
(is <- as(ix, "sparseVector")) ## an "isparseVector" (!)
(ns <- sparseVector(i= c(7, 3, 2), length = 10)) # "nsparseVector"
## rep() works too:
(ri <- rep(is, length.out= 25))

## Using `dim<-`  as in base R :
r <- ss
dim(r) <- c(4,5) # becomes a sparse Matrix:
r
## or coercion (as as.matrix() in base R):
as(ss, "Matrix")
stopifnot(all(ss == print(as(ss, "CsparseMatrix"))))

## currently has "non-structural" FALSE -- printing as ":"
(lis <- is & FALSE)
(nn <- is[is == 0]) # all "structural" FALSE

## NA-case
sN <- sx; sN[4] <- NA
(svN <- as(sN, "sparseVector"))

v <- as(c(0,0,3, 3.2, rep(0,9),-3,0,-1, rep(0,20),5,0),
         "sparseVector")
v <- rep(rep(v, 50), 5000)
set.seed(1); v[sample(v@i, 1e6)] <- 0
str(v)




system.time(for(i in 1:4) hv <- head(v, 1e6))
##   user  system elapsed
##  0.033   0.000   0.032
system.time(for(i in 1:4) h2 <- v[1:1e6])
##   user  system elapsed
##  1.317   0.000   1.319

stopifnot(identical(hv, h2),
          identical(is | FALSE, is != 0),
	  validObject(svN), validObject(lis), as.logical(is.na(svN[4])),
	  identical(is^2 > 0,	is & TRUE),
	  all(!lis), !any(lis), length(nn@i) == 0, !any(nn), all(!nn),
	  sum(lis) == 0, !prod(lis), range(lis) == c(0,0))

## create and use the t(.) method:
t(x20 <- sparseVector(c(9,3:1), i=c(1:2,4,7), length=20))
(T20 <- toeplitz(x20))
stopifnot(is(T20, "symmetricMatrix"), is(T20, "sparseMatrix"),
	  identical(unname(as.matrix(T20)),
                    toeplitz(as.vector(x20))))

## c() method for "sparseVector" - also available as regular function
(c1 <- c(x20, 0,0,0, -10*x20))
(c2 <- c(ns, is, FALSE))
(c3 <- c(ns, !ns, TRUE, NA, FALSE))
(c4 <- c(ns, rev(ns)))
## here, c() would produce a list {not dispatching to c.sparseVector()}
(c5 <- c.sparseVector(0,0, x20))

## checking (consistency)
.v <- as.vector
.s <- function(v) as(v, "sparseVector")
stopifnot(
  all.equal(c1, .s(c(.v(x20), 0,0,0, -10*.v(x20))),      tol=0),
  all.equal(c2, .s(c(.v(ns), .v(is), FALSE)),            tol=0),
  all.equal(c3, .s(c(.v(ns), !.v(ns), TRUE, NA, FALSE)), tol=0),
  all.equal(c4, .s(c(.v(ns), rev(.v(ns)))),              tol=0),
  all.equal(c5, .s(c(0,0, .v(x20))),                     tol=0)
)

也可以看看

sparseVector() 用於稀疏向量的友好構造(as(*, "sparseVector") 除外)。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Sparse Vector Classes。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。