r - 在 for 循环中分配不同的类

标签 r class for-loop

我想编写一个 for 循环,其中我需要先将 data.frame 的某些列的类转换为字符。经过一些操作(与此问题无关)后,我需要将列转换回其原始类。

列到它们原始类的转换必须在 for 循环中完成。我怎么能那样做?

这是一些数据和一个示例性的 for 循环:

# Example data
data <- data.frame(x1 = as.numeric(1:5), x2 = as.factor(7:3))

for(i in 1:ncol(data)) {

  # Save original class.
  class_col_i <- class(data[ , i])

  # Convert column as character.
  data[ , i] <- as.character(data[ , i])

  # (Here I will do some operations, which are irrelevant for this problem.)

  # Here I need to convert the column back to its original class.
  # How can I do that?

  # data[ , i] <- class_col_i... ???
}

class(data$x1) # This should be a numeric
class(data$x2) # This should be a factor

最佳答案

使用match.fun,看这个例子:

#dummy data
d <- mtcars
class(d$gear)
# [1] "numeric"

#change to character
classOrg <- class(d$gear)
d$gear <- as.character(d$gear)
class(d$gear)
# [1] "character"

#do some fun stuff
# ... d$gear 

#convert it back
myConvertFun <- match.fun(paste0("as.", classOrg))
d$gear <- myConvertFun(d$gear)
class(d$gear)
# [1] "numeric"

关于r - 在 for 循环中分配不同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37729344/

相关文章:

python - 在实例方法中更新类变量

java - 如何将代码/描述扩展到复杂的对象?

swift - 在 Swift 中跳出内部 For 循环的方法

c - 循环依赖于十六进制值的算法

多次运行一段代码,更改 R 中的某些参数(如 SAS 中的宏)

mysql - 如何使用 R 将列表放入数据库

ios - 使用 Codable 使用相同的 key 解码不同的类

r - 如何使用条件标签在循环中制作多个ggplots

r - LaTeX 符号未正确转换为 Moodle

r - 将数据帧列表合并为一个保留行名