Почему используется `<< -` нахмурился и как я могу его избежать?

Я следил за обсуждением ЗДЕСЬ, и мне любопытно, почему используется <<- нахмурился в R. Какое замешательство это вызовет?

Я также хотел бы получить некоторые советы о том, как я могу избежать <<- . Я часто использую следующее. Например:

 ### Create dummy data frame of 10 x 10 integer matrix. ### Each cell contains a number that is between 1 to 6. df <- do.call("rbind", lapply(1:10, function(i) sample(1:6, 10, replace = TRUE))) 

То, что я хочу достичь, – сдвинуть каждое число на 1, т. Е. Все 2-х станут 1-м, все 3-х будут равны 2 и т. Д. Поэтому все n будут n-1 . Я достигаю этого следующим:

 df.rescaled <- df sapply(2:6, function(i) df.rescaled[df.rescaled == i] <<- i-1)) 

В этом случае, как я могу избежать <<- ? В идеале я хотел бы иметь возможность передавать результаты sapply в другую переменную в соответствии с:

 df.rescaled <- sapply(...) 

Первая точка

<<- НЕ присваивает оператору глобальную переменную. Он пытается назначить переменную в ближайшей родительской среде. Итак, скажем, это путает:

 f <- function() { a <- 2 g <- function() { a <<- 3 } } 

тогда,

 > a <- 1 > f() > a # the global `a` is not affected [1] 1 

Второй пункт

Вы можете сделать это, используя « Reduce :

 Reduce(function(a, b) {a[a==b] <- a[a==b]-1; a}, 2:6, df) 

или apply

 apply(df, c(1, 2), function(i) if(i >= 2) {i-1} else {i}) 

Но

просто это достаточно:

 ifelse(df >= 2, df-1, df) 

Вы можете думать о <<- как глобальном присвоении (примерно потому, что, как указывает кохске, он присваивает верхней среде, если имя переменной не существует в более проксимальной среде). Примеры того, почему это плохо, здесь:

Примеры опасностей глобальных переменных в R и Stata

  • конвертировать письма в номера
  • Как вы читаете в нескольких файлах .txt в R?
  • Ошибка в model.frame.default ... переменная длина отличается
  • Проверить наличие директории и создать, если не существует
  • Элементарно означает над списком матриц
  • Есть ли способ `source ()` и продолжить после ошибки?
  • Слишком мало периодов для разложения ()
  • Не удалось установить пакеты в последней версии RStudio и R версии.3.1.1
  • R: неверная многобайтовая строка
  • нумерация по группам
  • Отбор проб в R из вектора различной длины
  • Interesting Posts

    Связывание со статическим свойством

    Рабочие пространства Eclipse: зачем и почему?

    Возможно ли разбить жесткий диск VirtualBox на несколько томов?

    WPF – Как создать кнопку изображения с шаблоном

    Папка продолжает меняться обратно в режим «только для чтения». Какая настройка разрешений вызывает это в Windows?

    Предупреждения о двойной ошибке указателя в C

    Maven GWT 2.0 и Eclipse

    поведение malloc (0)

    Как преобразовать массив байтов в шестнадцатеричную строку в Java?

    System.IO.FileSystemWatcher для отслеживания папки сетевого сервера – соображения производительности

    Увеличьте прямоугольную область под гистограммой

    POST multipart / form-data с Objective-C

    Вложенное приложение ASP.NET в IIS, наследующее родительские настройки конфигурации?

    Обновить строку, если она существует в остальной логике вставки с платформой Entity Framework

    ASP.NET Вызов WebMethod с jQuery AJAX «401 (несанкционированный)»

    Давайте будем гением компьютера.