日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

R变量索引 - 什么时候使用 @或$

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 R变量索引 - 什么时候使用 @或$ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

單細胞分析經常用到Seurat包,整個分析過程中的中間結果都在一個Seurat對象中存儲。常需要從里面提取對應數據進行后續分析,有時會用$,有時會用@,怎么選擇呢?

str函數是我們的好幫手,清晰展示對象層級結構和索引方式,如下,對應名字前出現@則用@索引(比如pbmc@assays),有則用則用索引(如pbmc@assays$RNA)。

>str(pbmc) Formal class 'Seurat' [package "Seurat"] with 12 slots..@ assays :List of 1.. ..$ RNA:Formal class 'Assay' [package "Seurat"] with 7 slots.. .. .. ..@ counts :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots.. .. .. .. .. ..@ i : int [1:2282976] 29 73 80 148 163 184 186 227 229 230 ..... .. .. .. .. ..@ p : int [1:2701] 0 779 2131 3260 4220 4741 5522 6304 7094 7626 ..... .. .. .. .. ..@ Dim : int [1:2] 13714 2700.. .. .. .. .. ..@ Dimnames:List of 2.. .. .. .. .. .. ..$ : chr [1:13714] "AL627309.1" "AP006222.2" "RP11-206L10.2" "RP11-206L10.9" ..... .. .. .. .. .. ..$ : chr [1:2700] "AAACATACAACCAC" "AAACATTGAGCTAC" "AAACATTGATCAGC" "AAACCGTGCTTCCG" ..... .. .. .. .. ..@ x : num [1:2282976] 1 1 2 1 1 1 1 41 1 1 ..... .. .. .. .. ..@ factors : list().. .. .. ..@ data :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots.. .. .. .. .. ..@ i : int [1:2282976] 29 73 80 148 163 184 186 227 229 230 ..... .. .. .. .. ..@ p : int [1:2701] 0 779 2131 3260 4220 4741 5522 6304 7094 7626 ..... .. .. .. .. ..@ Dim : int [1:2] 13714 2700.. .. .. .. .. ..@ Dimnames:List of 2.. .. .. .. .. .. ..$ : chr [1:13714] "AL627309.1" "AP006222.2" "RP11-206L10.2" "RP11-206L10.9" ..... .. .. .. .. .. ..$ : chr [1:2700] "AAACATACAACCAC" "AAACATTGAGCTAC" "AAACATTGATCAGC" "AAACCGTGCTTCCG" ..... .. .. .. .. ..@ x : num [1:2282976] 1 1 2 1 1 1 1 41 1 1 ..... .. .. .. .. ..@ factors : list().. .. .. ..@ scale.data : num[0 , 0 ].. .. .. ..@ key : chr "rna_".. .. .. ..@ var.features : logi(0).. .. .. ..@ meta.features:'data.frame': 13714 obs. of 0 variables.. .. .. ..@ misc : NULL..@ meta.data :'data.frame': 2700 obs. of 7 variables:.. ..$ orig.ident : Factor w/ 1 level "YSX": 1 1 1 1 1 1 1 1 1 1 ..... ..$ nCount_RNA : num [1:2700] 2419 4903 3147 2639 980 ..... ..$ nFeature_RNA: int [1:2700] 779 1352 1129 960 521 781 782 790 532 550 ..... ..$ phases : Factor w/ 3 levels "G1","G2M","S": 1 1 1 1 3 1 1 1 1 1 ..... ..$ G1 : num [1:2700] 0.988 0.568 0.999 0.941 0.432 0.966 0.997 0.95 0.703 0.993 ..... ..$ S : num [1:2700] 0.216 0.692 0.415 0.091 0.302 0.082 0.034 0.175 0.167 0.004 ..... ..$ G2M : num [1:2700] 0.002 0.055 0.001 0.079 0.227 0.055 0.274 0.301 0.273 0.333 .....@ active.assay: chr "RNA"..@ active.ident: Factor w/ 1 level "YSX": 1 1 1 1 1 1 1 1 1 1 .....@ project.name: chr "YSX"

具體操作如下:

# 查看metadata文件列信息 > colnames(pbmc@meta.data) [1] "orig.ident" "nCount_RNA" "nFeature_RNA" "phases" "G1" "S" "G2M"# 查看部分基因在部分細胞的原始reads counts > pbmc@assays$RNA@counts[11:14,1:30] Assay data with 13714 features for 2700 cells First 10 features:AL627309.1, AP006222.2, RP11-206L10.2, RP11-206L10.9, LINC00115, NOC2L, KLHL17, PLEKHN1, RP11-54O7.17, HES4

那么$和@,到底是什么?有什么區別呢?

首先這兩個符號最大的區別在于:它們是兩個不同的面向對象系統的提取變量的符號。S3對象通常是列表,使用$索引;S4對象的不同slot使用@索引。

那什么是S3、S4呢?

要想知道S3、S4,首先得了解一下面向對象編程(object-oriented programming),它是一種編程范式,它將對象作為程序的基本單元, 將程序和數據封裝 (encapsulate) 其中, 以提高軟件的重用性, 靈活性和擴展性。

R語言中現有的S3類、S4類、以及R6類等都可以實現面向對象的編程范式。

與S3不同,S4有更正式的定義和創建對象的統一方法。

如何定義S4類?
S4類使用setClass()函數來定義
用R的術語來說,成員變量被稱為屬性。當定義一個類時,我們需要設置類的名字和成員變量(以及成員變量的屬性)。每個成員變量也會稱為一個slot。

例子一:定義S4類

setClass("student", slots=list(name="character", age="numeric", GPA="numeric"))

在上面的例子中,我們定義了一個名為student的新類,它有三個slot,分別是name (字符型), age 和 GPA (數值型)。

如何創建S4對象?
S4類使用new()函數來定義
例子二:創建S4對象

# create an object using new() # provide the class name and value for slots s <- new("student",name="John", age=21, GPA=3.5) s An object of class "student" Slot "name": [1] "John" Slot "age": [1] 21 Slot "GPA": [1] 3.5

函數setClass()返回一個生成器函數。

這個生成器函數(通常與類同名)可用于創建新對象,它充當構造器。

student <- setClass(“student”, slots=list(name=“character”, age=“numeric”, GPA=“numeric”))
student
class generator function for class “student” from package ‘.GlobalEnv’
function (…)
new(“student”, …)
現在我們可以用構造函數創建新對象。

例子三:用構造函數創建S4對象

> student(name="John", age=21, GPA=3.5) An object of class "student" Slot "name": [1] "John" Slot "age": [1] 21 Slot "GPA": [1] 3.5

如何訪問和修改屬性?
正如使用$訪問list表的組件一樣,使用@訪問對象的屬性。

訪問屬性

s@name [1] "John" s@GPA [1] 3.5 s@age [1] 21

直接修改屬性
可以通過直接賦值修改屬性

# modify GPA s@GPA <- 3.7 s An object of class "student" Slot "name": [1] "John" Slot "age": [1] 21 Slot "GPA": [1] 3.7

用slot()函數修改屬性

> slot(s,"name") [1] "John" > slot(s,"name") <- "Paul" > s An object of class "student" Slot "name": [1] "Paul" Slot "age": [1] 21 Slot "GPA": [1] 3.7

方法和泛型函數
與S3類一樣,S4類的方法也屬于泛型函數,而不是類本身。使用S4泛型與S3泛型非常相似。

可以使用showMethods()函數列出所有可用的S4通用函數和方法。

例子四:列出所有泛型函數

> showMethods() Function: - (package base) Function: != (package base) ... Function: trigamma (package base) Function: trunc (package base)

在交互模式中輸入對象名稱將會輸出它,用S4通用函數show()來達到同樣效果。

您可以在上面的列表中看到這個函數,這個函數類似于S3 print()函數。

例子五:判斷一個函數是否是泛型函數。

> isS4(print) [1] FALSE > isS4(show) [1] TRUE

我們可以使用showMethods(show)列出show泛型函數所有的方法。

例子六:列出泛型函數的所有方法。

> showMethods(show) Function: show (package methods) object="ANY" object="classGeneratorFunction" ... object="standardGeneric" (inherited from: object="genericFunction") object="traceable"

如何去寫你自己的方法?
我們可以使用setMethod()幫助函數寫自己的方法。

例如,我們可以實現show()泛型的類方法,如下所示。

setMethod("show", "student", function(object) { cat(object@name, "\n") cat(object@age, "years old\n") cat("GPA:", object@GPA, "\n") } )

現在,如果我們像以前一樣以交互模式寫出對象的名稱,就會執行上面的代碼。

參考來源

https://www.datamentor.io/r-programming/s4-class/

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的R变量索引 - 什么时候使用 @或$的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看网站av | 亚洲欧美a| 亚洲综合在线成人 | 在线成人国产 | 天天碰天天碰 | heyzo北岛玲在线播放 | 日韩欧美在线观看一区 | 中国少妇乱子伦视频播放 | 国产亚洲第一页 | 裸体一区二区 | 一级做a爰片久久毛片潮喷 天天透天天干 | 国产成人精品影院 | 性综艺节目av在线播放 | 五月依人网 | 欧美乱妇高清无乱码 | 日韩a级片在线观看 | 99久久精品国产一区二区三区 | 免费婷婷| 麻豆传谋在线观看免费mv | 高清一区二区三区视频 | 成人免费视频大全 | 久久久久久久99 | 琪琪色网 | 亚洲午夜久久久久久久久 | 红桃视频亚洲 | av片手机在线观看 | 在线一区二区视频 | youjizz麻豆 | 日日夜夜狠 | 国产国拍精品亚洲 | 99热久久这里只有精品 | 一级做a视频 | 波多野结衣在线观看一区二区 | 91口爆一区二区三区在线 | 浪漫樱花在线观看高清动漫 | 亚洲精品韩国 | 中文字幕一区二区三区四区视频 | 怡春院一区二区 | 黄色免费在线网址 | 捆绑中国女人hd视频 | 999av| 国产伦精品一区二区三区免费 | 久久亚洲成人 | 麻豆国产在线播放 | 欧美日韩人妻一区二区 | 奇米影视9999 | 97在线观看免费高清 | a级淫片 | 亚洲第一综合网 | 久久久久一区二区精码av少妇 | 色婷婷在线观看视频 | 美女的奶胸大爽爽大片 | 欧美日韩四区 | www,四虎 | 人人干人人插 | 99色视频| 国产美女福利 | 日本成人一区 | av黄在线 | 亚洲经典一区二区三区四区 | 老司机av福利| 国产无遮挡一区二区三区毛片日本 | 美女扒开腿让人桶爽原神 | 午夜性福利视频 | 免费中文字幕日韩 | 免费观看成年人网站 | 日韩一级片在线观看 | 欧美日韩综合精品 | av无码精品一区二区三区 | 日产av在线播放 | 欧美日韩一级片在线观看 | 欧美黄色录像视频 | 超清纯大学生白嫩啪啪 | 蜜臀视频在线观看 | 潘金莲一级淫片aaaaaa播放 | 国产精品免费一区 | 久久精品国产亚洲av无码娇色 | 日韩毛片免费观看 | 91免费入口 | 中文写幕一区二区三区免费观成熟 | 日日摸天天爽天天爽视频 | 中文久久乱码一区二区 | 尤物视频在线观看 | 成人做爰视频www | 91瑟瑟| 综合xx网 | 国产色视频在线 | 快播久久| 毛片内射| 每日在线更新av | 成人免费视频观看视频 | 日韩不卡毛片 | 激情瑟瑟 | 婷婷综合av | 深夜视频在线免费观看 | 久久久久久国产精品三级玉女聊斋 | 97人妻精品一区二区三区动漫 | 国产v片 | 国产免费av在线 |