[R] preserve class in apply function

Andrew Simmons @kw@|mmo @end|ng |rom gm@||@com
Tue Feb 7 14:02:48 CET 2023

```It is not possible, apply() converts its argument to an array. You might be
able to use split() and lapply() to solve your problem.

On Tue, Feb 7, 2023, 07:52 Naresh Gurbuxani <naresh_gurbuxani using hotmail.com>
wrote:

>
> > Consider a data.frame whose different columns have numeric, character,
> > and factor data.  In apply function, R seems to pass all elements of a
> > row as character.  Is it possible to preserve numeric class?
> >
> >> mydf <- data.frame(x = rnorm(10), y = runif(10))
> >> apply(mydf, 1, function(row) {row["x"] + row["y"]})
> > [1]  0.60150197 -0.74201827  0.80476392 -0.59729280 -0.02980335
> 0.31351909
> > [7] -0.63575990  0.22670658  0.55696314  0.39587314
> >> mydf[, "z"] <- sample(letters[1:3], 10, replace = TRUE)
> >> apply(mydf, 1, function(row) {row["x"] + row["y"]})
> > Error in row["x"] + row["y"] (from #1) : non-numeric argument to binary
> operator
> >> apply(mydf, 1, function(row) {as.numeric(row["x"]) +
> as.numeric(row["y"])})
> > [1]  0.60150194 -0.74201826  0.80476394 -0.59729282 -0.02980338
> 0.31351912
> > [7] -0.63575991  0.22670663  0.55696309  0.39587311
> >> apply(mydf[,c("x", "y")], 1, function(row) {row["x"] + row["y"]})
> > [1]  0.60150197 -0.74201827  0.80476392 -0.59729280 -0.02980335
> 0.31351909
> > [7] -0.63575990  0.22670658  0.55696314  0.39587314
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help