Size: a a a

R language and Statistical data analysis

2019 December 01

ДК

Дмитрий Козлов in R language and Statistical data analysis
Артём Клевцов
И да, $ для data.frame интерпретирует его как список и извлекает элемент с потерей атрибута родительского объекта и ожидать от него аналогичного поведения с [.data.frame не стоит.
Да, я понял, почему я получаю такой результат, и почему это не баг. Я так и подозревал, что не понимаю тут каких-то базовых вещей. Спасибо, стало понятно! Пример с пакетом lobstr очень наглядный.
источник

АК

Артём Клевцов in R language and Statistical data analysis
Да, пакет полезный, хоть и крайне узко специализирован. Но если уж копаешь в глубь, то полезно знать.
источник

ДК

Дмитрий Козлов in R language and Statistical data analysis
aGricolaMZ
Т. е. как я вижу, пока переменная не создана, она NULL вне зависимости от вызова [,  получается, что mpg$var_new не отличается от mpg$var_new[1], а дальше уже приписование векторизовано
Да, но в моем примере происходит немного другое.  
df$gamma[1] <- 1
сначала создает вектор длины 1, в который записывает 1, а затем, по сути, происходит cbind уже существующего df и созданного вектора длиной 1.
Если я правильно понял.
источник

⌨️ in R language and Statistical data analysis
Дмитрий Козлов
Да, но в моем примере происходит немного другое.  
df$gamma[1] <- 1
сначала создает вектор длины 1, в который записывает 1, а затем, по сути, происходит cbind уже существующего df и созданного вектора длиной 1.
Если я правильно понял.
Простите, что влезаю, заинтересовала дискуссия.
Как я понял, если столбец с таким именем еще не существует, то вызывается `$<-.data.frame`(x, name, value) и в качестве value передается rhs. Не очень понятно, как здесь используется [1], но можно поставить эксперимент, демонстрирующий ресайклинг - в датасет mtcars который имеет 32 строки попытаться записать вектор размера 3 и получить соответствующую ошибку.
mtcars$temp[2:3] <- 1
:2

Интересно, что обновление уже существующего столбца работает нормально, там видимо методы резолвятся по-другому.

Я переопределил `[` и `[<-` и посмотрел, что приходит на вход. В случае нового столбца это (для моего примера) NULL, 2:3, 1:2, а в случае существующего вместо NULL приходя значения. Тут собственно и кроется разгадка.

`[<-`(NULL, 2:3, 1:2)
возвращает NA, 1, 2, а если вместо NULL вектор с данными - то корректно заменяет значения и возвращает новую копию.

Таким образом,
mtcars$temp[2:3] <- 1
:2  ведет себя, видимо, как-то так
`$<-`(
   mtcars, "temp",
   `[<-`(
       `$`(mtcars, "temp"),
       2:3, 1:2))
источник

e

este in R language and Statistical data analysis
I M
На R возможно написать всё
Даже сервер?)
источник

IM

I M in R language and Statistical data analysis
este
Даже сервер?)
R тьюринг полный, всё, что можно написать, можно на нем
источник

ДК

Дмитрий Козлов in R language and Statistical data analysis
⌨️
Простите, что влезаю, заинтересовала дискуссия.
Как я понял, если столбец с таким именем еще не существует, то вызывается `$<-.data.frame`(x, name, value) и в качестве value передается rhs. Не очень понятно, как здесь используется [1], но можно поставить эксперимент, демонстрирующий ресайклинг - в датасет mtcars который имеет 32 строки попытаться записать вектор размера 3 и получить соответствующую ошибку.
mtcars$temp[2:3] <- 1
:2

Интересно, что обновление уже существующего столбца работает нормально, там видимо методы резолвятся по-другому.

Я переопределил `[` и `[<-` и посмотрел, что приходит на вход. В случае нового столбца это (для моего примера) NULL, 2:3, 1:2, а в случае существующего вместо NULL приходя значения. Тут собственно и кроется разгадка.

`[<-`(NULL, 2:3, 1:2)
возвращает NA, 1, 2, а если вместо NULL вектор с данными - то корректно заменяет значения и возвращает новую копию.

Таким образом,
mtcars$temp[2:3] <- 1
:2  ведет себя, видимо, как-то так
`$<-`(
   mtcars, "temp",
   `[<-`(
       `$`(mtcars, "temp"),
       2:3, 1:2))
Интересное замечание. Не совсем понимаю про переопределение, Однако занятно, что следующий код работает нормально и не выдает ошибки:
df <- data.frame(alpha = c(1,2,3),
                beta = c(1,2,3))
df$gamma[2:3] <- 1:2
View(df)

Но если порядковый номер последнего элемента замены не совпадает с последним порядковым номером других элементов датафрейма, как в Вашем примере, то получаем ошибку:
df <- data.frame(alpha = c(1,2,3,4),
                beta = c(1,2,3,4))
df$gamma[2:3] <- 1:2
View(df)
источник

ДК

Дмитрий Козлов in R language and Statistical data analysis
⌨️
Простите, что влезаю, заинтересовала дискуссия.
Как я понял, если столбец с таким именем еще не существует, то вызывается `$<-.data.frame`(x, name, value) и в качестве value передается rhs. Не очень понятно, как здесь используется [1], но можно поставить эксперимент, демонстрирующий ресайклинг - в датасет mtcars который имеет 32 строки попытаться записать вектор размера 3 и получить соответствующую ошибку.
mtcars$temp[2:3] <- 1
:2

Интересно, что обновление уже существующего столбца работает нормально, там видимо методы резолвятся по-другому.

Я переопределил `[` и `[<-` и посмотрел, что приходит на вход. В случае нового столбца это (для моего примера) NULL, 2:3, 1:2, а в случае существующего вместо NULL приходя значения. Тут собственно и кроется разгадка.

`[<-`(NULL, 2:3, 1:2)
возвращает NA, 1, 2, а если вместо NULL вектор с данными - то корректно заменяет значения и возвращает новую копию.

Таким образом,
mtcars$temp[2:3] <- 1
:2  ведет себя, видимо, как-то так
`$<-`(
   mtcars, "temp",
   `[<-`(
       `$`(mtcars, "temp"),
       2:3, 1:2))
Надо заметить, что все происходит логично и ожидаемо в соответствии с объяснением Артема. Код вида
df$new.var < vector1
работает, если длина вектора vector1 кратна длине других переменных в датафрейме df, и выдает ошибку в другом случае, что в моем случае было ожидаемо:
df <- data.frame(alpha = 1:6,
                beta = 1:6)
df$gamma[2:3] <- 1:2
View(df)
источник

⌨️ in R language and Statistical data analysis
Дмитрий Козлов
Интересное замечание. Не совсем понимаю про переопределение, Однако занятно, что следующий код работает нормально и не выдает ошибки:
df <- data.frame(alpha = c(1,2,3),
                beta = c(1,2,3))
df$gamma[2:3] <- 1:2
View(df)

Но если порядковый номер последнего элемента замены не совпадает с последним порядковым номером других элементов датафрейма, как в Вашем примере, то получаем ошибку:
df <- data.frame(alpha = c(1,2,3,4),
                beta = c(1,2,3,4))
df$gamma[2:3] <- 1:2
View(df)
Переопределение  - я имел ввиду что я взял base::`[<-`, который содержит внутри вызов .Primitive("<-") и заменил на function(...) {print(list(...)); .Primitive("[<-")} Это хоть и не гарантирует корректной работы, но позволяет увидеть, что прилетает в этот оператор в качестве входных параметров
источник

⌨️ in R language and Statistical data analysis
Дмитрий Козлов
Надо заметить, что все происходит логично и ожидаемо в соответствии с объяснением Артема. Код вида
df$new.var < vector1
работает, если длина вектора vector1 кратна длине других переменных в датафрейме df, и выдает ошибку в другом случае, что в моем случае было ожидаемо:
df <- data.frame(alpha = 1:6,
                beta = 1:6)
df$gamma[2:3] <- 1:2
View(df)
Да, это прямо можно прочитать, если посмотреть в код функции `$<-.data.frame`. В любом случае, мне был не понятен стэк вызова и какие именно S3 методы вызывались, поэтому захотелось разобраться.
источник

АК

Артём Клевцов in R language and Statistical data analysis
Дмитрий Козлов
Интересное замечание. Не совсем понимаю про переопределение, Однако занятно, что следующий код работает нормально и не выдает ошибки:
df <- data.frame(alpha = c(1,2,3),
                beta = c(1,2,3))
df$gamma[2:3] <- 1:2
View(df)

Но если порядковый номер последнего элемента замены не совпадает с последним порядковым номером других элементов датафрейма, как в Вашем примере, то получаем ошибку:
df <- data.frame(alpha = c(1,2,3,4),
                beta = c(1,2,3,4))
df$gamma[2:3] <- 1:2
View(df)
Более корректно употреблять термин «перегрузка», под которой понимается подставнока в зависимости от ввода, если я правильно понял мысль.
источник

АК

Артём Клевцов in R language and Statistical data analysis
Стоит признать, что R полон странностей, как впрочем и любой другой язык программирования.
источник

ДК

Дмитрий Козлов in R language and Statistical data analysis
⌨️
Да, это прямо можно прочитать, если посмотреть в код функции `$<-.data.frame`. В любом случае, мне был не понятен стэк вызова и какие именно S3 методы вызывались, поэтому захотелось разобраться.
Да, получается, что если, как в Вашем примере, прилетает
  '[<-'(NULL, 2:3, 1:2) 
, то все выражение  
 (NULL, 2:3, 1:2) 
 воспринимается как вектор, который нужно присоединить к уже существующему датафрейму. Если я правильно понимаю. Если же вместо NULL - вектор, то сначала в нем производится замена, а потом он уже присоединяется. В случае вызова
df[2:3,"new.vector"] <- 1:2
сначала создается новый вектор внутри датафрейма df  (длины, равной длине других векторов в датафрейме, со всеми значениями, равными NA), который затем уже передается
[<-
. Кажется, так.
источник

A

A in R language and Statistical data analysis
Коллеги, подскажите, пожалуйста.

Пытаюсь поиграть с afazali.shinyapps.io/afazali5

Загружаю свой csv-в выборе датасетов никак не появляется.

Что делаю не так не понимаю.
источник

э

эдуард in R language and Statistical data analysis
Всем привет. Я выложил пакет для получения данных из AmoCRM. Реализован весь доступный функционал, за исключением пары совсем уж ненужных фичей.

Пакет: https://github.com/grkhr/amocrm
Дока: https://github.com/grkhr/amocrm#docs

Буду рад помощи в тестировании и распространении
источник

i

isya in R language and Statistical data analysis
эдуард
Всем привет. Я выложил пакет для получения данных из AmoCRM. Реализован весь доступный функционал, за исключением пары совсем уж ненужных фичей.

Пакет: https://github.com/grkhr/amocrm
Дока: https://github.com/grkhr/amocrm#docs

Буду рад помощи в тестировании и распространении
🔥
источник

АК

Артём Клевцов in R language and Statistical data analysis
эдуард
Всем привет. Я выложил пакет для получения данных из AmoCRM. Реализован весь доступный функционал, за исключением пары совсем уж ненужных фичей.

Пакет: https://github.com/grkhr/amocrm
Дока: https://github.com/grkhr/amocrm#docs

Буду рад помощи в тестировании и распространении
Довольно необычный нейминг для функций (CamelCase). Давненько не встречал пакетов, которые его используют.
источник

э

эдуард in R language and Statistical data analysis
Артём Клевцов
Довольно необычный нейминг для функций (CamelCase). Давненько не встречал пакетов, которые его используют.
Толькое сейчас понял, что вообще не встречал его в R. Показалось, что для Амо так лаконичнее и вполне читаемо. Надеюсь, в этом ничего плохого нет)
источник

АК

Артём Клевцов in R language and Statistical data analysis
Эта разновидность верблюда исопльзуется почти исключительно для нейминга классов.
источник

э

эдуард in R language and Statistical data analysis
эдуард
Толькое сейчас понял, что вообще не встречал его в R. Показалось, что для Амо так лаконичнее и вполне читаемо. Надеюсь, в этом ничего плохого нет)
а нет, встречал в некоторых пакетах
источник