That’s what apply
is documented to do. From ?apply
:
Value:
If each call to ‘FUN’ returns a vector of length ‘n’, then ‘apply’ returns an array of dimension ‘c(n, dim(X)[MARGIN])’ if ‘n > 1’.
In your case, 'n'=48
(because you’re looping over rows), so apply
will return an array of dimension c(48, 7429)
.
Also note that myxts.2
is not an xts object. It’s a regular array. You have a couple options:
-
transpose the results of
apply
before re-creating your xts object:data(sample_matrix) myxts <- as.xts(sample_matrix) dim(myxts) # [1] 180 4 myxts.2 <- apply(myxts, 1 , identity) dim(myxts.2) # [1] 4 180 myxts.2 <- xts(t(apply(myxts, 1 , identity)), index(myxts)) dim(myxts.2) # [1] 180 4
-
Vectorize your function so it operates on all the rows of an xts
object and returns an xts object. Then you don’t have to worry
aboutapply
at all.
Finally, please start providing reproducible examples. It’s not that hard and it makes it a lot easier for people to help. I’ve provided an example above and I hope you can use it in your following questions.