我在R中有一系列字符时间戳.当我POSIXct使用直观方法改变他们的类时,R指定模糊的时区EST.
例如:
as.POSIXct("2012-08-06 15:32:00")
as.POSIXct("2012-08-06 15:32:00", tz = "Australia/Brisbane")
as.POSIXct("2012-08-06 15:32:00", tz = "")
Run Code Online (Sandbox Code Playgroud)
在我的两个(Mac和Windows)盒子上产生相同的输出:
"2012-08-06 15:32:00 EST"
Run Code Online (Sandbox Code Playgroud)
这里的问题EST可能是任意数量的时区:美国的东部标准时间,或澳大利亚的东部标准时间,或加拿大的另一个时区(来自?timezone):
请注意,其中一些名称可能与您的想法不同:特别是EST是加拿大使用的时区,没有夏令时,而不是EST5EDT和(澳大利亚)东部标准时间.
有一种方法可以设置时区,避免使用此EST标签.它被提及,但在R ?timezone帮助中没有完全解释.根据澳大利亚新闻社的报道,将x设置为好奇号登陆火星的时间:
x <- as.POSIXct("2012-08-06 15:32:00", tz = "Etc/GMT-10")
x
"2012-08-06 15:32:00 GMT-10"
Run Code Online (Sandbox Code Playgroud)
我们可以通过将其转换为美国时区并使用加州新闻报道进行检查来测试这是否正确:
y <- format(x, tz = "America/Los_Angeles")
y
"2012-08-05 22:32:00"
Run Code Online (Sandbox Code Playgroud)
如果使用此Etc/GMT+n或Etc/GMT-n表示法,请注意以下警告?timezone:
许多系统支持GMT + n和GMT-n形式的时区,它们与UTC固定偏移(因此没有DST).与某些用法相反(但与PST8PDT等名称一致),负偏移是UTC之前(东)的时间,正偏差是UTC后面(西侧)的时间.
许多R教科书鼓励使用$从data.frames ^中检索变量(列).但是,我发现这在函数内部不起作用,我无法弄清楚原因.
data(BOD)
print(BOD)
# These work.
BOD$'demand'
BOD[ ,'demand']
# This works.
myFunc1 <- function(x, y){
z <- x[ , y]
return(z)
}
out <- myFunc(BOD, 'demand')
# This doesn't work.
myFunc2 <- function(x, y){
z <- x$y
return(z)
}
out <- myFunc2(BOD, 'demand')
Run Code Online (Sandbox Code Playgroud)
我注意到在R语言定义中它说:
使用$的表单适用于列表和pairlists等递归对象.它只允许文字>字符串或符号作为索引.也就是说,索引是不可计算的:对于需要评估表达式以查找索引的情况,请使用x [[expr]].当$应用于>非递归对象时,结果总是为NULL:从R 2.6.0开始,这是一个错误.
myFunc2上面是一个例子,其中$没有提供文字字符串吗?
^ Zuur 2009'R'的初学者指南61页
^ Spector 2008'数据操作与R'p 26,64,69