[R] preserve class in apply function
Jorgen Harmse
JH@rm@e @end|ng |rom roku@com
Wed Feb 8 17:10:00 CET 2023
What are you trying to do? Why use apply when there is already a vector addition operation?
df$x+df$y or as.numeric(df$x)+as.numeric(df$y) or rowSums(as.numeric(df[c('x','y')])).
As noted in other answers, apply will coerce your data frame to a matrix, and all entries of a matrix must have the same type.
Regards,
Jorgen Harmse.
Message: 1
Date: Tue, 7 Feb 2023 07:51:50 -0500
From: Naresh Gurbuxani <naresh_gurbuxani using hotmail.com>
To: "r-help using r-project.org" <r-help using R-project.org>
Subject: [R] preserve class in apply function
Message-ID:
<IA1P223MB049955F19238028D7A818CB2FADB9 using IA1P223MB0499.NAMP223.PROD.OUTLOOK.COM>
Content-Type: text/plain; charset="us-ascii"
> 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
[[alternative HTML version deleted]]
More information about the R-help
mailing list