为什么我已经在R中定义了我却找不到“ month.observed”对象?

时间:2018-11-03 20:35:38

标签: r

这是我的数据

enter image description here

ens1 <- read.csv("G:/ABV_DATA/ABV_2/book3.csv", header=TRUE, sep=",", stringsAsFactors = FALSE)
    attach(ens1)        

dates = as.Date(ens1$date, "%m/%d/%y")

#write.csv(dates, file = "myfile.csv")
ens1 = ens1[,2:4] #remove column 1 and kip columns 2 to 4

ens1 = data.frame(date=dates, ens1)

month.year <- function (x) {12*(as.POSIXlt(x)$year-1)+as.POSIXlt(x)$mon+1}
month = month.year(ens1$date) #the one that works is to use the full ens1$date

mean.TREFHT_MAX = tapply(TREFHT_MAX, month, mean)
sd.TREFHT_MAX= tapply(TREFHT_MAX,month,sd)

mean.RH=tapply(RH,month,mean)
sd.RH=tapply(RH, month,sd)
month = month.name #names from jan or dec

for(i in 1:length(mean.TREFHT_MAX)) {month.observed[i]=as.numeric(names(mean.TREFHT_MAX[i]))%%12

} #first get the months as numbers 0-11
month.observed[month.observed==0]<-12   # make the decembers 12 instead of 0
month.names <- months[as.numeric(month.observed)]


stats <- data.frame(mean.TREFHT_MAX,sd.TREFHT_MAX,mean.RH,sd.RH,month=month.names)
print(stats,digits=3)

1 个答案:

答案 0 :(得分:2)

基本上,您正在尝试使用[<-函数构建对象,而并非为此目的而设计的。必须先存在一个对象,然后才能对该对象的子集进行分配。您可能以为<-函数作为单个实体存在,但是当单独使用它时,它实际上是assign函数的简写形式,它使用pos和{ {1}}个参数。所以这个:

environment

...真的被翻译成:

x <- 5

并且在没有x的已定义值的情况下,这进一步意味着无法使用assign("x", 5, pos=-1) 作为<-的简写来执行:

assign

...因为“ x [2]”不是有效的R名称。

但是:

请参阅 x[2] <- 5 的帮助页面

<-

当您尝试运行代码时,实际上会导致调用?`<-` # need the backticks or quotes 函数。帮助页面将其称为“子分配”,并为您提供了指向“提取或替换对象的零件”的其他帮助页面的链接。上面的代码现在在组装完所有对象名称后转换为:

[<-

...,然后,当找不到x时,该错误消息被“抛出”。

(我希望这解释了为什么我不同意这不是一个“编程问题”。之所以出现这个问题,是因为对实际使用的函数以及如何解析R代码有误解。而实际上并不需要可复制的示例....因为`[<-`(x, 2, 5) 足以说明错误。)