Size: a a a

R (язык программирования)

2020 November 18

A

Alexander in R (язык программирования)
R
да ладно, норм же
было бы норм, если бы так было с самого начала, но N месяцев назад вполне работал get(varname) вместо всего этого разнообразия
источник

AS

Alexander Semenov in R (язык программирования)
Артём Клевцов
Пока ты будешь ждать, они уже объявят фичу deprecated.
И самое смешное -- это не шутка. С mutate_at примерно так и произошло.
источник

АК

Артём Клевцов... in R (язык программирования)
Alexander
`
kano_analyze <- function(dataset, varname) {
 dataset %>%
   mutate("{varname}" := case_when(
     .data[[paste0(varname, '_false')]] == 'Мне нравится' & .data[[paste0(varname, '_true')]] != 'Мне нравится' ~ 'R',
     
   )) -> dataset
 return(dataset)
}
`
Нет, это не изменение исходного объекта по ссылке, а переприсвоение по схеме copy-on-modify.
источник

DI

Daryna Ivaskevych in R (язык программирования)
Всем привет! У меня есть вопрос по работе с map.

У меня имеется вот такой вот датасет

mydata = data.frame(
 Months = c(1 ,1 ,1 , 2, 2, 2),
 Strings = rep(c('1', '2', '3', '1', '3', '4'))
)

И
я хочу автоматически найти количество строк, которые не повторятся в следующем месяце

Делаю я это вот так

output = mydata %>%
 nest(Nested = -Months) %>%
 arrange(Months) %>%
 mutate(Lost= map(Nested, lag(Nested), .f = function(.CurrentMonth, .PreviousMonth){
   length(keep(.PreviousMonth$Strings ,!.PreviousMonth$Strings %in% .CurrentMonth$Strings))
 }))

Но все значения в Lost равны 0.

Тем не менее, строка

length(keep(output$Nested[[1]]$Strings, !output$Nested[[1]]$Strings %in% output$Nested[[2]]$Strings ))

дает верный результат.

Подскажите, почему оно и не работает и как сделать чтобы работало.

Заранее спасибо)
источник

A

Alexander in R (язык программирования)
Артём Клевцов
Нет, это не изменение исходного объекта по ссылке, а переприсвоение по схеме copy-on-modify.
секундочку, а в R можно редактировать исходные объекты без переприсваивания??
источник

A

Alexander in R (язык программирования)
хотя вообще можно, конечно, gsub же это и делает
источник

АК

Артём Клевцов... in R (язык программирования)
Alexander
секундочку, а в R можно редактировать исходные объекты без переприсваивания??
Можно, но это секрет.
источник

АК

Артём Клевцов... in R (язык программирования)
Alexander
хотя вообще можно, конечно, gsub же это и делает
Нет, не делает.
источник

IR

Ignatius Reilly in R (язык программирования)
Alexander
секундочку, а в R можно редактировать исходные объекты без переприсваивания??
data.table :=
источник

A

Alexander in R (язык программирования)
а, упс, действительно не делает, май бэд
источник

PD

Pavel Demin in R (язык программирования)
я думал, что одна из фишек data.table как раз в том, что он не копирует ничего в памяти?
источник

A

Alexander in R (язык программирования)
я просто не пишу на dt, но чувствую, это скоро изменится
источник

АК

Артём Клевцов... in R (язык программирования)
Pavel Demin
я думал, что одна из фишек data.table как раз в том, что он не копирует ничего в памяти?
Ни ничего, а ничего сверх необходимого.
источник

AS

Alexander Semenov in R (язык программирования)
Alexander
я просто не пишу на dt, но чувствую, это скоро изменится
Такими темпами все там скоро будем.
источник

A

Alexander in R (язык программирования)
Alexander Semenov
Такими темпами все там скоро будем.
dt or deprecation
источник

PD

Pavel Demin in R (язык программирования)
чувствую, сейчас самое лучшее время вкинуть актуальный вопросик
источник

АК

Артём Клевцов... in R (язык программирования)
Alexander Semenov
Такими темпами все там скоро будем.
Уважаемый @konhis собирается в ближайшем будущем этому активно поспособствовать 😉
источник

PD

Pavel Demin in R (язык программирования)
косвенно продолжу  тему с проблемами подстановки переменной: меня со вчерашнего дня мучает вопрос
1) я получаю неизвестный массив, и не знаю, какие в нем колонки
2) в глобальном окружении всегда есть переменная a = 5
3) полученный массив (data.table) надо отфильтровать по типу dt[unknown_var < a], где unknown_var = get(names(dt)[1])
4) совершенно случайно оказывается, что моя unknown_var называется a
5) получается операция dt[a < a]

ну и получается, что код ломается.
я придумал только один фикс dt[a < .GlobalEnv$a]

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

собственно вопрос возник в контексте того, что меня страшно раздражают панды с их df[df["a"] < a] (мб я неопытный и можно проще) — но зато описанной выше проблемы (наверное) никогда не возникнет

EDIT: поправил для соответствия теме
источник

ИП

Иван Поздняков... in R (язык программирования)
#> Warning: your existence is deprecated as of dplyr 1.0.0. Warning: your existence is deprecated as of dplyr 1.0.0.
источник

АК

Артём Клевцов... in R (язык программирования)
Pavel Demin
косвенно продолжу  тему с проблемами подстановки переменной: меня со вчерашнего дня мучает вопрос
1) я получаю неизвестный массив, и не знаю, какие в нем колонки
2) в глобальном окружении всегда есть переменная a = 5
3) полученный массив (data.table) надо отфильтровать по типу dt[unknown_var < a], где unknown_var = get(names(dt)[1])
4) совершенно случайно оказывается, что моя unknown_var называется a
5) получается операция dt[a < a]

ну и получается, что код ломается.
я придумал только один фикс dt[a < .GlobalEnv$a]

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

собственно вопрос возник в контексте того, что меня страшно раздражают панды с их df[df["a"] < a] (мб я неопытный и можно проще) — но зато описанной выше проблемы (наверное) никогда не возникнет

EDIT: поправил для соответствия теме
На SO есть несколько вопросов с ответами. Если искал, то должен был наткнуться. Более-менее информативный привожу сюда: https://stackoverflow.com/a/57917822/1863950
источник