我有以下情況:我有不同的資料幀,我希望能夠根據其中一列的值(log2FoldChange>1 和 logFoldChange<-1)為每個資料幀創建 2 個資料幀。
為此,我使用以下代碼:
DJ29_T0_Overexpr = DJ29_T0[which(DJ29_T0$log2FoldChange > 1),]
DJ29_T0_Underexpr = DJ29_T0[which(DJ21_T0$log2FoldChange < -1),]
DJ229_T0 是我的資料框之一。
第一個問題:未考慮 log2FoldChange < -1 的資料幀的符號。
但主要問題是在制作函式時,我寫了以下內容:
spliteOverUnder <- function(res){
nm <-deparse(substitute(res))
assign(paste(nm,"_Overexpr", sep=""), res[which(as.numeric(as.character(res$log2FoldChange)) > 1),])
assign(paste(nm,"_Underexpr", sep=""), res[which(as.numeric(as.character(res$log2FoldChange)) < -1),])
}
然后我跑了:
spliteOverUnder(DJ29_T0)
沒有錯誤訊息,但我的物件沒有匯出到我的全域環境中。我試過了,return(paste(nm,"_Overexpr", sep="")但它只回傳物件名稱而不是關聯的資料框。
usingpaste()強制使用 of assign(),所以我不能這樣做:
spliteOverUnder <- function(res){
nm <-deparse(substitute(res))
paste(nm,"_Overexpr", sep="") <<- res[which(as.numeric(as.character(res$log2FoldChange)) > 1),]
paste(nm,"_Underexpr", sep="") <<- res[which(as.numeric(as.character(res$log2FoldChange)) < -1),]
}
spliteOverUnder(DJ24_T0)
我遇到以下錯誤:
Error in paste(nm, "_Overexpr", sep = "") <<- res[which(as.numeric(as.character(res$log2FoldChange)) > :
could not find function "paste<-"
如果您以前遇到過這種困難,我將不勝感激。如果你知道,一旦函式作業,如何使用 For 回圈遍歷包含我所有資料幀的串列,以將此函式應用于每個資料幀,我也是一個接受者。
謝謝
uj5u.com熱心網友回復:
分配時,使用pos引數將新物件提升出函式。
function(){
assign(x = ..., value = ...,
pos = 1 ## see below
)
}
... 其中 0 = 函式的本地環境,1 =下一個環境(定義函式的環境)等等。
uj5u.com熱心網友回復:
非常感謝 I_O,感謝您,我的功能運行良好:
spliteOverUnder <- function(res){
nm <-deparse(substitute(res))
assign(paste(nm,"_Overexpr", sep=""), res[which(as.numeric(as.character(res$log2FoldChange)) > 1),], pos=1)
assign(paste(nm,"_Underexpr", sep=""), res[which(as.numeric(as.character(res$log2FoldChange)) < -1),], pos=1)
}
spliteOverUnder(DJ29_T0)
您知道如何使用資料框串列執行 For 回圈嗎?
例如:
listRes <- list(DJ21_T0, DJ24_T0, DJ29_T0, DJ32_T0,
DJ24_DJ21, DJ29_DJ21, DJ32_DJ21,
DJ21_DJ24, DJ29_DJ24, DJ32_DJ24,
DJ21_DJ29, DJ24_DJ29, DJ32_DJ29,
DJ21_DJ32, DJ24_DJ32, DJ29_DJ32,
Rec2_T0, Rec6_T0, Rec9_T0,
Rec2_DJ32, Rec6_DJ32, Rec9_DJ32,
Rec6_Rec2, Rec9_Rec2,
Rec2_Rec6, Rec9_Rec6,
Rec2_Rec9, Rec6_Rec9)
for(i in listRes){
spliteOverUnder(i)}
這不起作用并創建了一個資料幀 i、一個資料幀 i_Overexpr 和一個資料幀 i_Underexpr....
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/465572.html
下一篇:如何在資料框中集成字典串列?
