histogram$breaks работает для данных, histogram$mids выдает ошибку

Мне интересно, если это ошибка.

У меня есть следующий фрагмент кода:

h2 <- hist(c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)))
model2 = nls(formula = log(counts[1:5]) ~a+log(mids[1:5])*gamma, start=list(gamma=-3,a=10),data=h2)

ломается с ошибкой:

Error in parse(text = x) : <text>:2:0: unexpected end of input
1: ~
  ^

Но если я сделаю:

h2 <- hist(c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)))
model2 = nls(formula = log(counts[1:5]) ~a+log(breaks[1:5])*gamma, start=list(gamma=-3,a=10),data=h2)

он не выдает ошибку (он не может соответствовать этим конкретным данным, но может соответствовать данным, которые у меня действительно есть).

Дело в том, что для работы, которую я делаю, мне нужны середины интервалов гистограммы, а не перерывы.

РЕДАКТИРОВАТЬ: после ошибки трассировка:

7: parse(text = x)
6: eval(parse(text = x)[[1L]])
5: formula(eval(parse(text = x)[[1L]]))
4: formula.character(object, env = baseenv())
3: formula(object, env = baseenv())
2: as.formula(paste("~", paste(varNames[varIndex], collapse = "+")), 
       env = environment(formula))
1: nls(formula = log(counts[1:5]) ~ a + log(mids[1:5]) * gamma, 
       start = list(gamma = -3, a = 10), data = h2)

person jbssm    schedule 16.01.2013    source источник
comment
Иногда вы используете h, а иногда h2 в своем коде. Не могли бы вы очистить это, чтобы это имело смысл...?   -  person joran    schedule 16.01.2013
comment
@joran Теперь все готово. Я использовал это из своего кода, спасибо. Проблема остается той же.   -  person jbssm    schedule 16.01.2013
comment
Что traceback выдает сразу после вашей ошибки? Кроме того, я очень сомневаюсь, что это баг в R. hist ежедневно используется тысячами людей, скорее вы сами ошиблись.   -  person Paul Hiemstra    schedule 16.01.2013
comment
@PaulHiemstra Я добавил трассировку сейчас (я думаю, это вы спросили, если нет, дайте мне знать). Я считаю, что тысячи людей используют его функцию каждый день... Я довольно скептически отношусь к тому, насколько мала доля, которая использует тот тип данных, который я пытаюсь получить от него.   -  person jbssm    schedule 16.01.2013
comment
Да, как я и подозревал, я думаю, проблема в том, что ваша формула на самом деле является ужасным, ужасным злоупотреблением формулами. Поместите нужные данные в отдельный фрейм данных и используйте настоящую формулу без всех этих сумасшедших оценок и подмножеств.   -  person joran    schedule 16.01.2013
comment
@PaulHiemstra Думаю, я добавил правильную трассировку сейчас ... извините, я новичок в R.   -  person jbssm    schedule 16.01.2013


Ответы (1)


Как я и подозревал:

d <- data.frame(counts = h2$counts[1:5],mids = h2$mids[1:5])
model2 = nls(formula = log(counts) ~a+log(mids)*gamma, start=list(gamma=-3,a=10),data=d)

запускается без ошибки синтаксического анализа формулы (но, конечно, все еще не подходит для этого небольшого неправильно сформированного набора данных).

person joran    schedule 16.01.2013
comment
Спасибо, я сделал что-то подобное после вашего комментария, и это работает. Однако синтаксический анализатор, который использует R, довольно привередлив. - person jbssm; 16.01.2013
comment
@jbssm Парсер, который использует R, довольно разборчив. Я не вижу доказательств этому утверждению. - person joran; 16.01.2013
comment
@joran Ну, ты только что видел это здесь. 1-й он выбирает один набор значений (h2$counts и h2$breaks), но решил, что ему не нравятся h2$mids, 2-й он получает набор данных из полностью идентифицированного data.frame и не может понять, что это такое. Я бы назвал это придирчивым... или, что еще хуже, непоследовательным. - person jbssm; 17.01.2013
comment
@joran Не совсем, потому что, если вы попробуете пример с: model2 = nls(formula = log(counts[1:5]) ~a+log(mids[1:5])*gamma, start=list(gamma=-3,a=10),data=h2), он все равно выйдет из строя с той же ошибкой, даже без учета $, о котором вы говорите, и без каких-либо причин думать, что h2 - это имя переменной в моей формуле, и это не не имеет смысла, поскольку я четко указываю набор данных и значения, которые он должен использовать. Это непоследовательно. - person jbssm; 17.01.2013
comment
@joran Почему по числовым причинам? Сообщение об ошибке точно такое же, как и результаты traceback(). - person jbssm; 17.01.2013
comment
@jbssm Одно и то же сообщение об ошибке может быть вызвано разными причинами. В частности, ошибки, связанные с возможным сбоем разложения матрицы, что и происходит здесь. - person joran; 17.01.2013
comment
@joran Нет, но эта ошибка по-прежнему является ошибкой синтаксического анализа, а не проблемой внутри функции nls, как вы можете видеть, запустив пример. В этом случае синтаксический анализатор R несовместим, и вы это ясно видите. В любом случае ваш обходной путь решает проблему, спасибо. - person jbssm; 17.01.2013
comment
@joran Это не я говорю, что это правда, это вывод traceback(). - person jbssm; 17.01.2013