根据另一个对象的类型更改对象类型

时间:2017-11-21 10:23:35

标签: r


如何将一个对象typeof的{​​{1}}更改为另一个对象a 没有明确指定类型

b

所以我想将b转换为a <- letters b <- as.factor(a) typeof(a) #> [1] "character" ,但没有明确说明 使用typeof(a),因为在另一个实例中as.character可能是 a。这显然不起作用:

integer

2 个答案:

答案 0 :(得分:2)

我最接近的是,但不确定是否有更好的解决方案。

a <- '1'

b <- 2

a <- unlist(lapply(a,paste0('as.',class(b))))

a

a <- '245'

a <- unlist(lapply(a,paste0('as.',class(b))))

a

Output:
> a
[1] 245

答案 1 :(得分:0)

@ amrrs的类似答案,除了我认为您可能希望以编程方式使用此功能,并且在转换对象的类型时,您可能会收到返回NA的错误 - 这是不受欢迎的行为 - 当您尝试将无法强制转换的变量转换为其他数据类型时。

以下功能基于R的强制规则来解释此问题。 (假设您要使用class()而不是typeof()

convertClass <- function(object1, object2){
  logic=c("logical", "integer", "numeric", "complex", "character", "list")

  ifelse(match(class(object1), logic) < match(class(object2), logic),
         eval(parse(text=paste0('as.',class(object2),"(",object1,")"))),
         paste0("convertClass() cannot convert type ", class(object1), " to ", class(object2))
    )
  }

> convertClass(1,'1')
[1] "1"
> convertClass('1', 1)
[1] "convertClass() cannot convert type character to numeric"

使用此功能会失去将"1"转换为1的功能,例如可以在R中强制执行,但如果您不知道,则会提供严格的保护措施您正在为该函数提供的变量的类型。