문제

I have the following function

myfunc <- function(x,myparam) {
     x <- do_sth(x, myparam)
     plot(x)
}

Then to be applied to these data:

files <- Sys.glob("myfile_no*.txt") # This is a vector

Currently I do the following:

for (i in 1:length(files)) {
    mf <- files[i]
    myfunc(mf,myparam=3);

}

How can I replace the for-loop above with apply or its other variations?

I tried this with error:

> apply(x,1, myfunc, myparam)
Error in apply(files, 1, myfunc, myparam = 3) : 
  dim(X) must have a positive length
Execution halted
도움이 되었습니까?

해결책

So, the obvious solution is not apply but lapply:

output_object <- lapply(files, myfunc, myparam = 3)

This also has the advantage of allowing you to use an 'anonymous' function if you want a slightly cleaner environment.

What I'm wondering, though, is why you want to? Is it an attempt to get away from perceived slowness in for loops? If so, you're not likely to see that great an improvement; people complaining "my for loop is slow" are normally complaining "I am trying a for-loop over a non-primitive data type" or "I am trying a for loop that iteratively adds to an object without a defined length". Those aren't the case here. The only thing I can think of that would improve your speed is to stop defining mf - simply call myfunc(files[i], myparam = 3).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top