我正在接受data.table:
DT <- data.table(num=c(1,4,6,7,8,12,13, 15), let=rep(c("A","B"), each=4))
Run Code Online (Sandbox Code Playgroud)
那么我有以下结果:
> sapply(DT, class)
num let
"numeric" "character"
Run Code Online (Sandbox Code Playgroud)
哪个好.
然后,添加一行:
DT<-rbind(DT, as.list(c(8, "B")))
Run Code Online (Sandbox Code Playgroud)
然后:
> sapply(DT, class)
num let
"character" "character"
Run Code Online (Sandbox Code Playgroud)
我发现这种恶意,R将第一列类型更改为字符并且没有预料到......我之后可以将列更改为数字但是如果我必须在每次插入后检查,那就太痛苦了.
有没有办法添加没有这个缺点的线?
您的第一个问题源于您使用c将参数组合到矢量中的函数.这会产生一个原子向量(在这种情况下 - 你要组合两个长度为一的原子向量,即向量8和向量"B"),它们可能只有一种数据类型,所以在你的例子中c(8,"B")首先进行评估,结果是:
str( c(8, "B") )
# chr [1:2] "8" "B"
Run Code Online (Sandbox Code Playgroud)
因此,你不应该期待任何其他结果!