如何将一个对象typeof
的{{1}}更改为另一个对象a
没有明确指定类型
b
所以我想将b转换为a <- letters
b <- as.factor(a)
typeof(a)
#> [1] "character"
,但没有明确说明
使用typeof(a)
,因为在另一个实例中as.character
可能是
a
。这显然不起作用:
integer
答案 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
中强制执行,但如果您不知道,则会提供严格的保护措施您正在为该函数提供的变量的类型。