Большая длина объекта не кратна короткой длине объекта, когда я пытался построить непрерывный график - PullRequest
0 голосов
/ 21 июня 2019

Я хотел выпустить функцию, возвращающую количество наблюдений из кадра данных (allfil_data, имеющего различные значения x1 в диапазоне от -1 до 1), путем изменения значений порога (x1_th_adj).

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

structure(list(x1 = c(-0.761194029850821, 0.236467236467132, 
0.0188679245282589, -0.518518518518598, 0.473684210526331, 0.284280936454798
)), row.names = c(NA, 6L), class = "data.frame")

Коды:

Summ_x1_th <- function(x1_th_adj){
  nrow(filter(allfil_data, abs(x1) >= x1_th_adj))
}

p <- ggplot(data = data.frame(x = 0), mapping = aes(x = x))
Summ_x1_th <- function(x1_th_adj){
  nrow(filter(allfil_data, abs(x1) >= x1_th_adj))
}
p + stat_function(fun = Summ_x1_th) + xlim(0,0.1)

Ошибка показывает:

In abs(x1) >= x :
  longer object length is not a multiple of shorter object length

PS: Это можно легко сделать, запустив цикл, возможно, с 1000 наблюдениями, но я хотел бы посмотреть, сможет ли ggplot добиться этого. Спасибо!

Ответы [ 2 ]

2 голосов
/ 21 июня 2019

Мы можем использовать Vectorize

p + 
    stat_function(fun = Vectorize(Summ_x1_th)) + xlim(0,0.1)
0 голосов
/ 21 июня 2019

При расчете векторов вы можете увидеть эти предупреждающие сообщения, если два вектора имеют разную длину.

Например

x =1:10
y =1:12
x+y 
[1] 2 4 6 8 10 12 14 16 18 20 12 14
Warning message:
In x+y : longer object length is not a multiple of shorter object length

В случае y = 11: 12, x = 1: 2 используется повторно. Поэтому я рекомендую проверить длину векторов. И установите длинную на меньшую или сделайте длину двух векторов делимой без остатка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...