2014-01-13 4 views
1

모든 'string to variable name'게시물을 읽었지만 그 중 어느 것도 내 특정 문제를 다루지 않았습니다. 나는 seqinr 패키지 'read.fasta'를 사용하여 만든 벡터 목록 (DNA 서열 데이터)을 가지고있다. 변형의 데이터 프레임과 해당 위치가 있고 데이터 프레임에 지정된 위치의 목록 벡터 요소를 대체 값으로 변환하려고합니다. 개별적으로이R 문자열을 변수 이름으로 변환하고 변수를 바꿉니다.

list$name[number] <- alternate.character 

# I tried 
for (i in 1:length(df$CHROM)) 
    if (is.na(df$Call[i])) {next} else {get(paste("test$",df$CHROM[i],"[",df$POS[i],"]",sep="")) <- df$Call[i]} 

# example data 
test <- list("One" = c("a","t","a","g","c"), 
       "Two" = c("g","a","t","t","a","c","a")) 
df <- data.frame("CHROM"=c(rep("One",2),rep("Two",3)), 
      "POS" = c(2,4,1,3,6), 
      "REF" = c("t","g","g","t","c"), 
      "ALT" = c("a","a","t","g","t"), 
      "Call" = c("T","A","G",NA,"T")) 

을 사용하여 수행 할 수 있습니다 그러나 '수'목록에서 벡터 요소를 반환하고 나 상위 목록의 변형으로 지정하는 것을 허용하지 않습니다.

는 내가 원하는 것은 당신이 개별적으로 다만 할 수 있기 때문에이 문제가되지 않습니다 테스트 데이터의

$One 
[1] "a" "T" "a" "A" "c" 

$Two 
[1] "G" "a" "t" "t" "a" "T" "a" 

$One 
[1] "a" "t" "a" "g" "c" 

$Two 
[1] "g" "a" "t" "t" "a" "c" "a" 

에서 이동하려면 목록이지만, 실제 데이터 10,000 개가 넘는 서열과 100,000 개가 넘는 변종이 있습니다. 보너스 포인트를 벡터화 할 수있는 경우, 목록 및 데이터 프레임의 정보를 동시에 사용하도록 적용 함수를 중첩하는 데 충분한 경험이 없습니다. 이 작업

sessionInfo() 
R version 3.0.2 (2013-09-25) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_GB.UTF-8  LC_NUMERIC=C    
[3] LC_TIME=en_GB.UTF-8  LC_COLLATE=en_GB.UTF-8  
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 
[7] LC_PAPER=en_GB.UTF-8  LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] seqinr_3.0-7 

loaded via a namespace (and not attached): 
[1] tools_3.0.2 
+0

여기 REF와 ALT 열 관련이 있습니까? – Spacedman

+0

실제로, 그들은이 부분에 대해 부적절합니다. 죄송합니다. 이전에 '전화'문자를 사용하는 데 사용되었습니다. – JeremyS

+0

당신의 접근법을 계속하려면'for (i in seq_len (nrow (df))) {if (df ​​$ POS [i])]] - as.character (df $ Call [i])}'; 'test' –

답변

1

사용할 수 sapply :

res <- sapply(names(test), function(x) { 
    tmp <- df[df$CHROM == x & !is.na(df$Call), ] 
    replace(test[[x]], tmp$POS, as.character(tmp$Call)) 
}) 


res 
# $One 
# [1] "a" "T" "a" "A" "c" 
# 
# $Two 
# [1] "G" "a" "t" "t" "a" "T" "a" 
+0

그게 내가 원하는 것입니다. 그리고 그것은 매우 간단 해 보입니다. 고맙습니다. – JeremyS

관련 문제