2017-09-15 3 views
2

함수에 인수로 전달하려는 임의의 수의 R 객체가 있습니다. 객체의 명명 규칙은 "input_ \ d +"즉, 문자열 "input_"다음에 하나 이상의 자릿수가옵니다. 단지 세이 인수에 대한 정적 예는 같을 것이다 다음함수가 일치하도록 패턴을 기반으로 인수를 전달하십시오.

my_function <- function(input_1, input_2, input_3) 

을 나는 R "를 입력 _ \ d 개 +"재잘을 만족하는 모든 개체에 대해 "모양"을 확인하고 그것을 전달해야 할 것입니다 무엇 함수 (함수의 코드는 물론 전달 된 임의의 수의 매개 변수를 처리 할 수 ​​있습니다).

어떤 조언이 매우 극명하게 될 것이다

,

OLI

+2

어떻게 이런 상황에 처 했습니까? 관련된 객체들이 많다면 아마 목록에 있어야 할 것입니다. 비슷하게 이름이 지정된 객체를 사용자 환경에 두는 것은 데이터를 추적하고 사용하는 것과 거의 비슷하지 않습니다. – MrFlick

+0

알아요. 위 목록에서 "input_1"은 "input_2"와 같은 목록이므로 목록의 목록을 허용하지 않는 타사 함수를 사용하고 있습니다 (목록의 목록이 아님). 필자는 이전에 "평평하게"사용했던 목록 (purrr : flatten 사용) 목록을 전달하는 것에 지쳤지만이 방법은 효과가 없습니다. – Oliver

+1

그래도 do.call을 사용하면 목록을 다른 매개 변수로 쉽게 바꿀 수 있습니다. 먼저 목록에 데이터를 저장하면 작업하기가 더 쉽습니다. – MrFlick

답변

5

당신은 당신이 약간 수정해야 할 수있는 모든 입력의 이름 목록을 만들 수 mgetls를 사용하고 함수에 그 목록을 전달할 수 그 종류의 입력 :

my_function(mget(ls(pattern = "^input_\\d+$"))) 
+0

그리고 필요하다면'do.call ("my_function", mget (ls (pattern = "^ input _ \\ d + $")))'를 사용하여 별도의 매개 변수로 전달하십시오. – MrFlick

1

get을 사용하면 개체 이름을 검색 할 수 있습니다.

input_1 <- 1 
input_2 <- 2 
input_3 <- 3 

my_function <- function(input_1) { 
    print(input_1^input_1) 
} 

for(i in 1:3) { 
    foo_1 <- get(paste0("input_", i)) 
    my_function(foo_1) 
} 

1 
4 
27