lapply의 FUN에 여러 인수 전달 (및 기타 * apply)


99

lapplyin을 사용할 때 여러 인수를 함수에 전달하는 것과 관련된 질문 이 R있습니다.

lapply를 구문과 함께 사용하면 lapply(input, myfun);쉽게 이해할 수 있으며 myfun을 다음과 같이 정의 할 수 있습니다.

myfun <- function(x) {
 # doing something here with x
}

lapply(input, myfun);

및의 요소는 inputx인수로 전달됩니다 myfun.

하지만 더 많은 인수를 전달해야하는 경우 어떻게해야 myfunc합니까? 예를 들어 다음과 같이 정의됩니다.

myfun <- function(x, arg1) {
 # doing something here with x and arg1
}

이 함수를 두 input요소 ( x인수로)와 다른 인수 를 전달하는 데 어떻게 사용할 수 있습니까?


1
";"로 R 콘솔 입력 라인 종료 과거에 매크로 처리 언어를 사용했을 가능성이 있다는 신호입니다. 삼중점 인수는 "R 소개"문서의 "자신 만의 함수 작성"섹션의 하위 섹션 4에 설명되어 있으며, 아마도 가장 먼저 읽어야 할 "매뉴얼"입니다.
IRTFM

답변:


122

도움말 페이지를 보면 lapply의문 의 여지 가있는 .... 도움말 페이지의 인수 섹션을 보면 다음 행을 찾을 수 있습니다.

...: optional arguments to ‘FUN’.

따라서 다음과 같이 lapply호출에 다른 인수를 인수로 포함하기 만하면됩니다 .

lapply(input, myfun, arg1=6)

그리고 lapply, arg1그것이 무엇을해야할지 알고있는 논쟁이 아니라는 것을 인식 하면 자동으로 myfun. 다른 모든 apply기능은 동일한 작업을 수행 할 수 있습니다.

부록 :... 자신 만의 함수를 작성할 때도 사용할 수 있습니다 . 예를 들어, plot어떤 지점에서 호출하는 함수를 작성하고 함수 호출 에서 플롯 매개 변수를 변경할 수 있기를 원한다고 가정합니다. 각 매개 변수를 함수의 인수로 포함 할 수 있지만 이는 성가신 일입니다. 대신 ...(함수에 대한 인수와 그 안에 플롯하는 호출 모두에 대한 인수로) 사용할 수 있으며 함수가 인식하지 못하는 인수가 자동으로에 전달되도록 할 수 plot있습니다.


두 번째 인수, 예를 들어 "arg1"이 "입력"목록과 일치하는 목록이면 어떻게됩니까? lapply (input, myfun, arg1 = input2)를 시도하면 input2가 목록 인 경우 lapply가 'input'과 같이 요소별로 전체 목록을 한 번에 전달하는 것처럼 보입니다.
Alan

10
방금 작동하는 다른 게시물에서 답변을 찾았습니다. mapply (myfun, df $ input, df $ input2)
Alan


11

다음과 같은 방법으로 수행 할 수 있습니다.

 myfxn <- function(var1,var2,var3){
      var1*var2*var3

    }

    lapply(1:3,myfxn,var2=2,var3=100)

그리고 당신은 답을 얻을 것입니다 :

[[1]] [1] 200

[[2]] [1] 400

[[3]] [1] 600


3
myfun <- function(x, arg1) {
 # doing something here with x and arg1
}

x벡터 또는 목록과 myfun에서 lapply(x, myfun)의 각 요소에 대해 호출됩니다 x별도.

옵션 1

arg1myfun호출 ( myfun(x[1], arg1), myfun(x[2], arg1)등) 에서 전체를 사용 하려면 lapply(x, myfun, arg1)(위에 언급 된대로) 사용하십시오.

옵션 2

당신은 그러나 전화를하고 싶습니다 myfun의 각 요소 arg1의 요소와 함께 별도로 x( myfun(x[1], arg1[1]), myfun(x[2], arg1[2])등)은 사용할 수 없습니다 lapply. 대신 mapply(myfun, x, arg1)(위에 언급 된대로) 또는 apply다음을 사용하십시오.

 apply(cbind(x,arg1), 1, myfun)

또는

 apply(rbind(x,arg1), 2, myfun).
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.