Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 创建一个循环并粘贴_R_Loops_Paste - Fatal编程技术网

R 创建一个循环并粘贴

R 创建一个循环并粘贴,r,loops,paste,R,Loops,Paste,我的循环有问题。 我有一个数据框: Transcript=c(1,1,1,1,2,2,2,2,2) Exon=rep(c(1:4,1:5)) S=c("aaa","ttt","ccc","ggg","ata","tat","cgc","gcg","bbb") E=c("AAA","TTT","CCC","GGG","ATA","TAT","CGC","GCG","BBB") DF=data.frame(Transcript, Exon, S, E) DF s=split( DF , DF$Tra

我的循环有问题。 我有一个数据框:

Transcript=c(1,1,1,1,2,2,2,2,2)
Exon=rep(c(1:4,1:5))
S=c("aaa","ttt","ccc","ggg","ata","tat","cgc","gcg","bbb")
E=c("AAA","TTT","CCC","GGG","ATA","TAT","CGC","GCG","BBB")
DF=data.frame(Transcript, Exon, S, E)
DF
s=split( DF , DF$Transcript,)
我想按转录本对数据帧进行子集划分,并将E列和S列粘贴在一起,以给出每个转录本中所有可能的组合。例如,对于转录本1,我想返回:

AAAAA、AAAttt、AAACC、AAAggg、TTTaaa、TTTttt、TTTccc、TTTggg、CCCaaa、CCCttt、CCCCCCC、CCCggg、GGGaaa、GGGttt、GGGccc、GGGGGGGG

我尝试了以下循环,但它只返回
AAAaaa
AAAttt
AAAccc
AAAggg

for(i in 1:nrow(s[[1]])){p=paste(s[[1]][1,4],s[[1]][1:i,3],sep="")}

如何创建此循环?

类似的方法可能会奏效:

lapply(s, function(df) apply(expand.grid(df$E, df$S),1,paste0,collapse=""))
或者,按照@akrun的建议

lapply(s, function(df) do.call(paste0, expand.grid(df$E, df$S)))

您可以尝试
data.table

library(data.table)
setDT(DF)[,Reduce(paste0,CJ(E, S)), by=Transcript]
数据
DF很好地使用expand.grid!您还可以执行
lappy(s,函数(df)do.call(paste0,expand.grid(df$E,df$s))
DF <- data.frame(Transcript, Exon, S, E)