2017-10-26 8 views
1

순차적 이름을 가진 벡터를 스택 싶습니다.R, 순차적 이름을 가진 벡터 결합

예를 들어, 나는

a1<-1:3 
a2<-4:6 
a3<-7:9 

내가 아는

이 그 나는 수 당신

z<-as.vector(rbind(a1,a2,a3)) 

내가 할 수있는 방법이 나는 등의 (100)이있는 경우 A1, A2, A3, ... , a100?

감사합니다.

+1

예상되는 결과는 무엇입니까? –

답변

1

get()을 사용하여 변수에 액세스 할 수 있습니다. 다음과 같이 보일 것이다 귀하의 예는 다음과 같습니다

a_list <- list() 
for(i in 1:3){ 
    a_list[[i]] <- get(paste0("a",i)) 
} 

z <- as.vector(do.call("rbind",a_list)) 

또는 lapply 사용 : 그런 다음이 예를 할 수

as.vector(do.call("rbind",lapply(1:3,function(x){get(paste0("a",x))}))) 

i in 1:100 또는 무엇이든 필요합니다.

1

mget을 사용할 수 있습니다. 다음 결과는 exmple 코드와 동일한 출력입니다. 1:31:100으로 변경할 수 있습니다.

as.vector(matrix(unlist(mget(paste0("a", 1:3))), ncol = 3, byrow = TRUE)) 
[1] 1 4 7 2 5 8 3 6 9 
+0

니스, 나는'모르겠다. ' –

0

당신은 목록 'LST', 당신은 단순히 do.call 부를 수의 구성원 (rbind, LST), 또는 do.call (C, LST)로 모든이 있다면 - 또는 올라가지 (LST). 그래서 트릭은 변수를 목록으로 가져 오는 것입니다. 'ls'를 사용하여 원하는 변수 이름을 반환 한 다음 해당 이름에 mget을 사용할 수 있습니다.

do.call (c, mget (ls (pattern = "a [0-9] + ")))

여기서 패턴은 글로벌 환경에서 a123 형식의 모든 변수를 찾는 정규 표현식입니다.

+0

고마워. 내가 이렇게 할 때, '무엇이'함수 또는 문자열이어야한다. 메시지가 나왔다. 좀 더 도와 줄 수있어? –

+0

'c'는 일반적으로 함수이므로 재정의했을 수 있습니까? do.call (rbind, ...)을 시도해보고 더 잘 작동하는지 확인하십시오. –