병렬로 실행할지 여부를 지정할 수있는 lapply
함수의 다른 버전을 구현하고 싶습니다. 코드는 다음과 같다 :R : lapply ...를 전달할 때 "function"을 찾을 수 없습니까?
papply <- function(x,fun,...,
parallel=FALSE,parallel.options=list(mode="socket",cpus=2),
integrate=rbind,convert=NULL) {
if(parallel) {
require(parallelMap)
do.call(parallelStart,parallel.options)
result <- parallelLapply(x,fun,...)
parallelStop()
} else {
result <- lapply(x,fun,...)
}
if(is.function(integrate)) {
result <- do.call(integrate,result)
}
if(is.function(convert)) {
result <- convert(result)
}
return(result)
}
parallel=TRUE
, 난 그렇지 않으면 내가 보통 lapply
함수를 사용 {parallelMap}
패키지에 parallelLapply()
을 사용합니다. 두 가지 방법 모두에서 벡터 /리스트를 매핑하려고하면 x
이고 매핑 기능은 fun
입니다. fun
에는 둘 이상의 매개 변수가있을 수 있으므로 fun
에 추가 인수를 전달하려면 ...
을 사용합니다.
그러나, 추가 인수는 같은 지정되지 않은 경우
papply(1:5,function(i,x){return(data.frame(a=i,b=i+1))})
그것은 잘 작동하고 올바른 값을 반환 추가 인수는
papply(1:5,function(i,x){return(data.frame(a=i,b=i+x))},x=1)
같이 지정
a b
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6
그러나 경우
문제가 해결되지 않았지만
과 같은 오류가보고되었습니다.Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'fun' of mode 'function' was not found
4 get(as.character(FUN), mode = "function", envir = envir)
3 match.fun(FUN)
2 lapply(x, fun, ... = ...) at utils.R#37
1 papply(1:5, function(i, x) {
return(data.frame(a = i, b = i + x))
}, x = 1)
왜이 오류가 발생하는지 알 수 없습니다. 오류를 해결하고 기능을 작동 시키려면 어떻게합니까?
실제로 오류는 '1 : 5'가 '재미'와 일치한다는 것을 나타내지 만 왜 이런 일이 발생할 수 있습니까? –
@KunRen -'papply'는 두 개의 인자'x'와'fun'를 가지고 있습니다. 당신은'papply'에 대한 호출에서'x'라고 명명했습니다. 그런 다음 위치 지정 일치는 이름이없는 첫 번째 인수를 아직 첫 번째 형식 인수와 일치시킵니다. 따라서 '1 : 5'는 '재미'로 매치됩니다. 함수 정의를 변경하여 두 함수에서 동일한 인수 이름을 가지지 않아야합니다. – mnel
@mnei - 예,'x'를'.x'로 변경하고'fun'를'.fun'으로 변경 한 후에 작동합니다. '...'이 나타나면 인수의 이름을 지정하는 것이 매우 까다 롭습니다. 감사! –