Как исправить проблему с «Ошибка в plot.window (...): нужны конечные значения xlim» в R - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь написать функцию, которая будет выполнять точечную графику для меня,

структура данных, с которой я работаю, выглядит следующим образом:

'data.frame':   129 obs. of  15 variables:
 $ Player      : Factor w/ 129 levels "Abbrederis, Jared",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ College     : Factor w/ 79 levels "Alabama","Arizona",..: 78 20 65 77 27 48 67 31 31 19 ...
 $ Position    : Factor w/ 7 levels "DB","LB","OL",..: 7 7 6 4 4 4 2 2 7 7 ...
 $ OverallGrade: num  5.2 5.96 5.4 5.16 5.45 5.1 6.6 5.37 5.9 6.4 ...
 $ Height      : int  73 73 77 70 68 73 77 73 71 77 ...
 $ ArmLength   : num  31.4 32.6 34 31.2 31 ...
 $ Weight      : int  195 212 265 225 173 218 255 237 198 240 ...
 $ HandLength  : num  9.62 9 9 9.5 8.88 ...
 $ Dash40      : num  4.5 4.56 4.74 4.82 4.26 4.48 4.66 4.64 4.43 4.61 ...
 $ BenchPress  : int  4 14 28 20 20 19 15 22 7 13 ...
 $ VerticalJump: num  30.5 39.5 33 29.5 38 38 34.5 35 38.5 32.5 ...
 $ BroadJump   : int  117 123 118 106 122 121 119 123 122 119 ...
 $ Cone3Drill  : num  6.8 6.82 7.42 7.24 6.86 7.07 6.82 7.24 6.69 7.33 ...
 $ Shuttle20   : num  4.08 4.3 4.3 4.49 4.06 4.46 4.19 4.35 3.94 4.39 ...
 $ Position1   : Factor w/ 7 levels "WO","DB","S",..: 1 1 6 4 4 4 5 5 1 1 ...
  ..- attr(*, "scores")= num [1:7(1d)] 4.54 4.75 5.22 4.59 4.58 ...
  .. ..- attr(*, "dimnames")=List of 1
  .. .. ..$ : chr  "DB" "LB" "OL" "RB" ...

Мне удалось сделатьпостроение графиков без написания функции и кода:

with(nfl,plot(nfl$Dash40,nfl$BenchPress,
              pch=c(1,3,4,2,0,8,5),
              col=c("black","red","blue","darkgreen","purple","orange","gray"),
              xlab = "Bench Press weight", 
              ylab="40-year dash time in seconds"),
              panel.first = grid())
legend("bottomright", legend=levels(nfl$Position), 
       pch=c(1,3,4,2,0,8,5),
       cex=0.5,
       col=c("black","red","blue","darkgreen","purple","orange","gray"))
a<-paste(nfl$Player,nfl$BenchPress)
text(nfl$Dash40,nfl$BenchPress,label=as.character(a),cex=0.5)

enter image description here

Так что в основном я хочу видеть связь между различными числовыми переменными, и я подумал, что есликод выше работает, следующая функция также должна работать,

myplot<-function(xvar,yvar,xlab,ylab){
  b<-paste("xlab","vs","ylab")
  xvar<-nfl$"xvar"
  yvar<-nfl$"yvar"
  with(nfl,plot(yvar,xvar),
                pch=c(1,3,4,2,0,8,5),
                col=c("black","red","blue","darkgreen","purple","orange","gray"),
                xlab="xlab",ylab="ylab",
                main="b")
}

myplot(Dash40,BenchPress,dash,bench)

Я использовал Dash40 и BenchPress для тестирования функции, но оказалось, что функция не работает:

Error in plot.window(...) : need finite 'xlim' values
In addition: Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
3: In min(x) : no non-missing arguments to min; returning Inf
4: In max(x) :
 Show Traceback

 Rerun with Debug
 Error in plot.window(...) : need finite 'xlim' values 

По сути, я пытаюсь сделать ту же работу, используя два разных кода, почему второй не работает?Может, кто-нибудь подскажет, как решить проблему?

1 Ответ

0 голосов
/ 28 сентября 2018

Я очень смущен вашей функцией.Почему у него есть аргументы xvar,yvar, которые он перезаписывает без использования?

Что подразумевается под nfl$"xvar" и nfl$"yvar"?

Почему это вообще делается, поскольку вы затем используете with(nfl,...?

Если у nfl нет столбцов с именами xvar или yvar, то они вызовут ошибку или будут интерпретированы как NULL;если вы строите график NULL, то вам необходимо указать пределы графика, поскольку его невозможно найти по данным.

Функция завершается ошибкой, поскольку вы строите график NULL

Вам также необходимопередать данные из nfl в функцию, так как существует опасность, что Dash40 и BenchPress не будут найдены, поскольку они существуют только внутри nfl.Для этого вы используете символ $.Вместо BenchPress вы должны передать nfl$BenchPress в функцию.

Должно работать приведенное ниже.

myplot<-function(xvar,yvar,xlab,ylab){
  b<-paste(xlab,"vs",ylab)
  plot(yvar,xvar,
                pch=c(1,3,4,2,0,8,5),
                col=c("black","red","blue","darkgreen","purple","orange","gray"),
                xlab=xlab,ylab=ylab,
                main=b)
}

myplot(nfl$Dash40,nfl$BenchPress,"dash","bench")
...