Вызов plot () считает, что data.frame является атомарным вектором - PullRequest
0 голосов
/ 20 марта 2019

У меня есть data.frame, irv, с интересующей колонкой.class(irv) возвращает 'data.frame'.

is.recursive(irv) возвращает TRUE, is.atomic(irv) возвращает FALSE.В консоли irv$x возвращает интересующий столбец.max(irv$x) также возвращает соответствующее максимальное значение.

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

plot(y~x,data = subsetirv,xlab = '', ylab = '', ylim = c(0,20), 
     xlim = c(0, max(irv$x)),
     cex = 0.5, pch = 19) 

, это всеаргументы, которые у меня есть, в случае, если есть какое-то странное взаимодействие с аргументом

И все же каждый раз, когда он выдает следующую ошибку:

Error in irv$x : $ operator is invalid for atomic vectors

Почему вызов plot () считает, чтоirv атомарен, когда все остальное утверждает, что это фрейм данных?

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

Есть ли какое-то странное взаимодействие, о котором я не думаю?

Кстати, данные, которые наносятся на график, являются подмножеством irv, если это имеет значение.

-edit- Что-то, что я только что попробовал, сохранило фрейм данных как другое имя объекта.Первоначально он назывался irv, и я сохранил в новый объект под названием testdf.Это решило проблему.Есть ли что-то в сюжете или в максимальной функциональности?Название явно было проблемой, но я не знаю почему.

-edit2- после предложения вот пастбина с выводом dput(head(irv)): pastebin и вотвывод str(irv):

'data.frame':   16198 obs. of  17 variables:
 $ reader     : chr  "MG" "MG" "MG" "MG" ...
 $ read       : int  1 1 1 1 1 1 1 1 1 1 ...
 $ age        : num  2 3 4 5 6 7 8 9 10 11 ...
 $ fishid     : Factor w/ 2118 levels "2010_TNS_0135",..: 7 7 7 7 7 7 7 7 7 7 ...
 $ otorad     : num  6.15 9.52 13.47 17.32 22.28 ...
 $ year       : chr  "2010" "2010" "2010" "2010" ...
 $ readid     : chr  "2010_TNS_0153_MG_1" "2010_TNS_0153_MG_1" "2010_TNS_0153_MG_1" "2010_TNS_0153_MG_1" ...
 $ incwidth   : num  3.94 3.37 3.94 3.85 4.96 ...
 $ profflag   : chr  "good" "good" "good" "good" ...
 $ median     : num  3.85 3.82 3.78 3.77 3.78 ...
 $ upper75prob: num  4.44 4.19 3.94 3.94 4.03 ...
 $ lower25prob: num  3.58 3.65 3.67 3.5 3.56 ...
 $ IQR        : num  0.859 0.543 0.269 0.437 0.465 ...
 $ diff_flag  : num  0.0954 -0.8162 0.6171 0.1933 2.5376 ...
 $ roll_flag  : chr  "good" "good" "good" "good" ...
 $ irv        : num  3.936 -0.563 0.571 -0.09 1.104 ...
 $ irvf       : chr  "good" "good" "good" "good" ...

1 Ответ

2 голосов
/ 21 марта 2019

Проблема не в том, что у вас есть data.frame с именем irv, а в том, что у вас есть столбец с именем irv в data.frame с именем irv.

Когда вы используетеСинтаксис формулы с plot(), все параметры оцениваются в контексте data.frame, который вы передаете в параметре data=.Ваш параметр xlim = c(0, max(irv$x)) в основном работает

xlim = with(irv, c(0, max(irv$x)))

, поэтому он находит столбец с именем "irv", и этот столбец является атомарным, и поэтому не знает, что делать с оператором $.

Чтобы избежать путаницы, предварительно рассчитайте это значение вне функции (и убедитесь, что у вас нет столбца, в котором указано имя используемой вами переменной

maxx <- max(irv$x)
plot(y~x,data = subsetirv,xlab = '', ylab = '', ylim = c(0,20), 
     xlim = c(0, maxx),
     cex = 0.5, pch = 19) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...