日韩性视频-久久久蜜桃-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变量索引 - 什么时候使用 @或$的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91福利视频在线观看 | 天堂av手机版| 国产精品国产三级国产传播 | 少妇一边呻吟一边说使劲视频 | 欧美xxxxxx片免费播放软件 | 涩视频在线观看 | 久草国产在线观看 | xxx视频在线观看 | 在线观看三区 | 国产精品女主播 | 手机天堂av | 国产激情av在线 | 搞中出| jlzzjizz在线播放观看 | 免费国产一区二区 | 一区二区国产欧美 | 九九亚洲| 国产精品久久久午夜夜伦鲁鲁 | 欧洲裸体片| 麻豆毛片 | 性工作者十日谈 | 无码人妻久久一区二区三区 | 亚洲成人精品一区二区三区 | 三度诱惑免费版电影在线观看 | 黄色片免费在线观看 | 欧美视频在线一区二区三区 | 黑丝啪啪 | 国产三级视频 | 97操 | 麻豆视频在线播放 | 精品无码一区二区三区 | 激情国产在线 | 国产精品久久久久免费 | 少妇太爽了太深了太硬了 | 国产精品综合一区二区 | 潮喷失禁大喷水aⅴ无码 | 波多野吉衣在线视频 | 亚洲自拍在线观看 | 男同志毛片特黄毛片 | 成人动漫一区 | www欧美 | 三级在线观看网站 | 日韩中文一区二区 | 国产一级久久久 | 国产猛男猛女超爽免费视频 | 国语av | 老牛影视av老牛影视av | 91av视频网站| 影音先锋日韩资源 | 久夜精品 | 亚洲少妇自拍 | av2018| 久久草av| 九九久久九九久久 | 麻豆传媒视频入口 | 亚洲九九色 | 久久成年视频 | 中文在线观看高清视频 | 爱色av网站| 嫩草网站在线观看 | 亚洲va欧美va国产综合久久 | 久艹视频在线观看 | 不卡av中文字幕 | 日韩视频在线观看一区二区 | 久久国产精品99久久人人澡 | 91激情网 | 亚洲av综合一区二区 | 日韩精品视频免费在线观看 | 免费视频久久久 | 国产一区二区在线视频 | 欧美交换国产一区内射 | 国产成人免费视频 | 欧美黑人一区二区 | 四虎免费影视 | www夜片内射视频日韩精品成人 | 亚洲啊啊啊啊啊 | 成人久久久久 | 国产精品久久婷婷 | 第四色视频 | 中文字幕第18页 | 中文字幕在线视频第一页 | 久久久久久久美女 | 亚洲自拍p | 国精产品乱码一区一区三区四区 | av在线播放网址 | 一本大道av伊人久久综合 | 日韩福利在线视频 | 久久久久久久久久久久久国产 | 天天插天天射天天干 | 黑人精品无码一区二区三区 | 亚洲最新| 国产精品9999 | 精品一性一色一乱农村 | 国产黄色一区二区 | 亚洲视频一区二区三区四区 | 亚洲视频一二三 | 亚洲精品人妻无码 | 成人福利视频在线观看 | 拍真实国产伦偷精品 |