2017-03-31 1 views
0

ich einen Datenrahmen df haben, die wie folgt aussieht:Speichern Sie die Ausgabe einer Schleife in einer Funktion in einen Vektor oder data.frame

structure(list(sequence = c("CSPPPPSPSPHPRPP", "GEGSPTSPTSPKQPG", 
"EAGAPAGSGAPPPAD", "PAPPKPKESKEPENA", "AKPKQQDEDPDGAAE", "GDRGGGTGNEDDDYE" 
), group = c("BP", "BP", "BP", "BP", "BP", "BP")), .Names = c("sequence", 
"group"), row.names = c(NA, -6L), class = c("tbl_df", "tbl", 
"data.frame")) 

Für alle Zeichenvariablen unter df$sequence Ich möchte alle bekommen die möglichen Untermengen von 7 Zeichen, die nach jeder Iteration um ein Zeichen nach rechts verschoben werden. Dafür habe ich eine Funktion namens scan_core_OLpeptides erstellt. Wenn ich die folgende Funktion anwenden:

scan_core_OLpeptides <- function(x) { 
    for(i in seq_len(nchar(x)-7+1)){ 
    print(str_sub(string = x, start = i, end = i+6)) 
}} 

bekomme ich folgende Ausgabe:

[1] "CSPPPPS" "GEGSPTS" "EAGAPAG" "PAPPKPK" "AKPKQQD" "GDRGGGT" 
[1] "SPPPPSP" "EGSPTSP" "AGAPAGS" "APPKPKE" "KPKQQDE" "DRGGGTG" 
[1] "PPPPSPS" "GSPTSPT" "GAPAGSG" "PPKPKES" "PKQQDED" "RGGGTGN" 
[1] "PPPSPSP" "SPTSPTS" "APAGSGA" "PKPKESK" "KQQDEDP" "GGGTGNE" 
[1] "PPSPSPH" "PTSPTSP" "PAGSGAP" "KPKESKE" "QQDEDPD" "GGTGNED" 
[1] "PSPSPHP" "TSPTSPK" "AGSGAPP" "PKESKEP" "QDEDPDG" "GTGNEDD" 
[1] "SPSPHPR" "SPTSPKQ" "GSGAPPP" "KESKEPE" "DEDPDGA" "TGNEDDD" 
[1] "PSPHPRP" "PTSPKQP" "SGAPPPA" "ESKEPEN" "EDPDGAA" "GNEDDDY" 
[1] "SPHPRPP" "TSPKQPG" "GAPPPAD" "SKEPENA" "DPDGAAE" "NEDDDYE" 

das ist genau das, was ich will. Ich wollte diese Ausgabe jedoch in einem Objekt speichern, vorzugsweise in einem Vektor oder in einem Datenrahmen. Ich dachte über das Speichern in einer Liste nach, aber es hat nicht funktioniert.

+0

Sie können mit ' apply', um es int zu einem Objekt zu bekommen oder ein Objekt in for-Schleife zu erstellen und die Ausgabe an die – akrun

+0

Ich habe versucht, das Objekt zu erstellen und speichern jede Iteration in es, aber es hat nicht funktioniert. – BCArg

+0

Bitte überprüfen Sie die Lösung, die ich unter – akrun

Antwort

3

Ich verwende d zoo Paket für diesen,

library(zoo) 
sapply(strsplit(df1$sequence, ''), function(i) rollapply(i, 7, by = 1, 
                function(i)paste0(i, collapse = ''))) 
+1

geschrieben habe Beachten Sie, dass dies auch geschrieben werden kann: 'sapply (strsplit (df1 $ sequenz, ''), rollapply, 7, einfügen, collapse = '')' –

1

wir die Funktion ändern können ein list erstellen, um die Ausgabe zu speichern, die von jedem kommt 'i'

scan_core_OLpeptides <- function(x) { 
    x1 <- vector("list", nrow(df)) 
    for(i in seq(nchar(x) - 7 +1)){ 
    x1[[i]] <- str_sub(string = x, start = i, end = i+6) 

    } 
    x1 
} 


scan_core_OLpeptides(df$sequence) 
#[[1]] 
#[1] "CSPPPPS" "GEGSPTS" "EAGAPAG" "PAPPKPK" "AKPKQQD" "GDRGGGT" 

#[[2]] 
#[1] "SPPPPSP" "EGSPTSP" "AGAPAGS" "APPKPKE" "KPKQQDE" "DRGGGTG" 

#[[3]] 
#[1] "PPPPSPS" "GSPTSPT" "GAPAGSG" "PPKPKES" "PKQQDED" "RGGGTGN" 

#[[4]] 
#[1] "PPPSPSP" "SPTSPTS" "APAGSGA" "PKPKESK" "KQQDEDP" "GGGTGNE" 

#[[5]] 
#[1] "PPSPSPH" "PTSPTSP" "PAGSGAP" "KPKESKE" "QQDEDPD" "GGTGNED" 

#[[6]] 
#[1] "PSPSPHP" "TSPTSPK" "AGSGAPP" "PKESKEP" "QDEDPDG" "GTGNEDD" 
Verwandte Themen