У меня есть много кода, который использует оператор $
, а не [[
. Я читал о многих преимуществах [[
и хотел бы реорганизовать весь код.
Возникли проблемы со следующим методом? И как мне лучше всего выполнить поиск и заменить RStudio или TextWrangler на Mac?
l <- list()
l$`__a` <- data.frame(`__ID` = stringi::stri_rand_strings(10, 1), col = stringi::stri_rand_strings(10, 1), check.names = F)
код будет выглядеть так:
l$`__a`$`__ID`
И я хотел бы, чтобы реорганизовать его:
l[["__a"]][["__ID"]]
Для достижения этой цели, являются следующие замены достаточно?
$` to [["
` to "]]
Я нашел одну область, в моем коде, где этот метод не будет работать, и теперь я также нашел обходной путь для того, как избежать вопроса: Avoiding backtick characters with dplyr
df <- dat[["__Table"]] %>% select(`__ID`) %>% mutate(fk_table = "__Table", val = 1)
Перед выполнением замен выше, я должен был бы изменить функцию select
на это, чтобы избежать ложных замен на обратный апостроф характер:
select_(as.name("__ID"))
к сожалению, __
в именах столбцов нельзя избежать, поскольку данные загружаются из реляционной базы данных (FileMaker) и должны быть записаны обратно в базу данных при сохранении имен столбцов.
Список литературы о [[
:
- Code autocompletion with lists in RStudio
- Is it possible to index an R list using a character variable and the '$' operator?
- The difference between [] and [[]] notations for accessing the elements of a list or dataframe
Справки о рефакторинге в R:
Честно говоря, я бы не стал слишком беспокоиться о реорганизации вашего кода. Вероятно, вы собираетесь ввести больше ошибок в рефакторинг, чем вы, вероятно, испытаете, оставив его. Я просто потратил 20 минут, пытаясь начать, и лучшее, что я могу придумать, не приходит туда, где почти все обычные случаи, не говоря уже о крайних случаях. 'Библиотека (stringr) тест <- с ("х <- DF $ имя_переменной \ п", "х <- DF $ имя_переменной", "х <- DF $ имя_переменной") str_replace (тест, узор = "([$]) (. +) (\ n | [! \" # $% &() * +, -./:; <=>? @^\ '{|} ~])", replace = " [[\ "\\ 2 \"]] \\ 3 ")' – Benjamin
I second @ комментарий Бенджамина. Исправьте только важные вещи в существующем коде и используйте вашу новую игру fav-идиомы, двигающуюся вперед. Ваш '' '-полный код не ошибается и не нарушайте. Проведите свой ограниченный ресурс времени на новые и важные вещи. – hrbrmstr
Спасибо @Benjamin и @hrbmstr, я ценю ваши комментарии. Здесь цель рефакторинга - это лишь часть истории, а не только для чтения кода. предпочитают '' 'для удобочитаемости, даже если у него есть символы обратной ссылки. Мои главные цели - разрешить прохождение столбца nam es как переменные (даже когда они начинаются с '_', и это проще со стандартными строками, которые не содержат символов обратного вызова.) Имеет ли это смысл? Теперь части, имеющие обратные сигналы, жестко закодированы, и я буду двигаться к их динамическому вычислению. – Bobby