Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:使用text()参数向for循环添加定性数据:未知索引类型';列表';错误消息_R_List_For Loop_Plot - Fatal编程技术网

R:使用text()参数向for循环添加定性数据:未知索引类型';列表';错误消息

R:使用text()参数向for循环添加定性数据:未知索引类型';列表';错误消息,r,list,for-loop,plot,R,List,For Loop,Plot,我有样本数据存储在 data.frame xy,并在for循环中绘制,如下面的代码所示。这一切都是正确的 xy <- data.frame(NAME=c("NAME1","NAME1","NAME1","NAME2","NAME2","NAME2","NAME3","NAME3"),ID=c(87,87,87,199,199,199,233,233), X_START_YEAR=c(1950,1988,1994,1899,1909,1924,1945,1948),Y_START_VALUE

我有样本数据存储在
data.frame xy
,并在for循环中绘制,如下面的代码所示。这一切都是正确的

xy <- data.frame(NAME=c("NAME1","NAME1","NAME1","NAME2","NAME2","NAME2","NAME3","NAME3"),ID=c(87,87,87,199,199,199,233,233), X_START_YEAR=c(1950,1988,1994,1899,1909,1924,1945,1948),Y_START_VALUE=c(75,25,-90,-8,-55,-10,-9,12),X_END_YEAR=c(1985,1994,1999,1904,1924,1987,1946,1949), Y_END_VALUE=c(20,50,-15,-70,-80,-100,24,59))

   NAME  ID X_START_YEAR Y_START_VALUE X_END_YEAR Y_END_VALUE
1 NAME1  87         1950            75       1985          20
2 NAME1  87         1988            25       1994          50
3 NAME1  87         1994           -90       1999         -15
4 NAME2 199         1899            -8       1904         -70
5 NAME2 199         1909           -55       1924         -80
6 NAME2 199         1924           -10       1987        -100
7 NAME3 233         1945            -9       1946          24
8 NAME3 233         1948            12       1949          59
我试图做的是使用
text()
参数将定性值放置在
X\u END\u YEAR
位置,略高于X轴

我的方法可能会有什么错误,从而导致我收到如上所述的错误消息?有人知道我该怎么修吗?任何帮助都将不胜感激。当您排除第二个
for loop
(注释掉的部分)时,带有示例数据的代码应该可以工作,但这样不包括定性数据

# split xy by group as defined by ID
ind <- split(xy,xy$ID)

for (i in ind){
  xx = unlist(i[,grep('X_',colnames(i))])
  yy = unlist(i[,grep('Y_',colnames(i))])    
  fname <- paste0(i[1, 'ID'], '.png')
  png(fname, width=1679, height=1165, res=150)
  if(any(xx < 1946)) {my_x_lim <- c(min(xx), 2014)} else {my_x_lim <- c(1946, 2014)} 
  par(mar=c(6,8,6,5))
  plot(xx, 
       yy,
       main=unique(i[,1]),
       xlab="Time [Years]",
       ylab="Value [m]",
       pch=21, bg='white',
       xlim = my_x_lim,font.lab=2, cex.lab=1.2, cex.axis=1.1)
  axis(1, at = seq(1000, 2050, 5), cex.axis=1, labels=FALSE, tcl=-0.3)
  axis(2, at = seq(-100000, 100000, 500), cex.axis=1, labels=FALSE, tcl=-0.3)
  abline(h=0, col = "gray60")
  i <- i[,-1]
  segments(i[,2],i[,3],i[,4],i[,5],lwd=2)
  points(xx, yy, pch=21, bg='white', cex=0.7)
  title(sub=i$warn, adj=0.035, line=-1.5, font=3, cex=1)

  if (i$ID[1] %in% data_qual%ID){
    rel_data_qual <- data_qual[data_qual$ID %in% i$ID,]
    text(x = rel_data_qual$X_END_YEAR,
         y = min(i$Y_END_VALUE + 3),
         labels = rel_data_qual$Y_END_VALUE)  
  }  
      dev.off()
    }  
#按ID定义的组拆分xy

ind不能使用
i
进行索引,因为
i
是一个
data.frame
。您可以继续直接使用
i
,就像您在
的外部
中所做的那样。我想你是想做这样的事情:

for(j in 1:length(which(data_qual$ID %in% i$ID))) {
  text(
         x = data_qual[data_qual$ID %in% i$ID, 'X_END_YEAR'] [j],
         y = min(i$Y_END_VALUE+3),
    labels = data_qual[data_qual$ID %in% i$ID, 'Y_END_VALUE'] [j]
  )
}  
但即使这样,也为
循环添加了一个不必要的
。你可以说:

rel_data_qual <- data_qual[data_qual$ID %in% i$ID,]
text(x = rel_data_qual$X_END_YEAR,
     y = min(i$Y_END_VALUE + 3),
     labels = rel_data_qual$Y_END_VALUE)

rel_data\u qual在过去几周里,您就这些数据问了很多问题。很多时候,你犯了一些简单的错误,我相信你会自己解决的。如果你不认为你可以自己解决这些问题,那么你可以考虑花更多的时间来学习基础知识,然后再请求别人帮助。谢谢你的回答。不过,我有一个问题,在我的数据中,并不是每组
xy
(由
ID
定义)都存在定性数据!我用
ID
233向xy->
NAME3
添加了一个新组,从而更改了输入数据,使其更清晰。这将导致data.frame为空,并导致标签的
长度为0的额外错误。我怎样才能摆脱这个错误呢?我觉得你缺乏努力令人困惑。您清楚地理解了这个问题,并且您的代码表明您有解决这个问题的工具——只需在运行
text
之前编写一条if语句进行检查即可。
rel_data_qual <- data_qual[data_qual$ID %in% i$ID,]
text(x = rel_data_qual$X_END_YEAR,
     y = min(i$Y_END_VALUE + 3),
     labels = rel_data_qual$Y_END_VALUE)