我花了近两天的时间来寻找错误发生的原因-可能对许多人来说微不足道,但我不能找出原因,我感谢帮助:
当我创建一个新的data.frame并使用...$...
语法添加一个特定类(POSIXct)的列时,它工作得很好(下面代码中的“p”列,它们如预期的那样成为类 POSIXct)。
然而,如果我使用...[..., ...]
语法执行相同的操作,POSIX类在赋值时丢失(下面代码中的“n”列,因为它们无意中变成了class numeric)。
即使显式地设置了class,它仍使用...[..., ...]
语法而不是...$....
语法来保持数值。
这种行为背后的原因是什么?显然我已经找到了一个变通办法,但使用列名向量更方便,我担心我错过了一些非常基本的东西,但不知道是什么,或在哪里查找哪些关键字。
基本上我需要通过变量访问列,然后分配类和数据。
rm(dfDummy) # just make sure there is no residual old data/columns leftover
dfDummy <- data.frame(a = 1:10, dummy = dummy)
dfDummy$p <- as.POSIXct(NA)
dfDummy$p.rep <- as.POSIXct(rep(NA, 10))
dfDummy[ , c("n1", "n2")] <- as.POSIXct(NA)
dfDummy[ , c("n1.rep", "n2.rep")] <- as.POSIXct(rep(NA, 10))
sapply(X = c("p", "p.rep", "n1", "n2", "n1.rep", "n2.rep"), function(x) class(dfDummy[, x]))
# even after setting the class explicitely, it remains "numeric" - what is wrong?
class(dfDummy[ , c("n1", "n2", "n1.rep", "n2.rep")]) <- c("POSIXct", "POSIXt")
sapply(X = c("p", "p.rep", "n1", "n2", "n1.rep", "n2.rep"), function(x) class(dfDummy[, x]))
1条答案
按热度按时间icnyk63a1#
这个问题实际上与使用
$
或[
没有任何关系,除了当使用$
时分配单个列,而当使用[
时分配多个列。相反,当您为多个列赋值时,POSIXct向量被回收并简化为矩阵-而矩阵不能保存类POSIXct。
如果您传递的是一个列表,它将工作: