Путь библиотеки R не изменяется после изменения переменных окружения [duplicate]

Вот почему динамически созданные элементы не реагируют на клики & nbsp;:

var body = $("body");
var btns = $("button");
var btnB = $("<button>B</button>");
// `<button>B</button>` is not yet in the document.
// Thus, `$("button")` gives `[<button>A</button>]`.
// Only `<button>A</button>` gets a click listener.
btns.on("click", function () {
  console.log(this);
});
// Too late for `<button>B</button>`...
body.append(btnB);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

В качестве обходного пути вы должны прослушивать все клики и проверять исходный элемент & nbsp;:

var body = $("body");
var btnB = $("<button>B</button>");
var btnC = $("<button>C</button>");
// Listen to all clicks and
// check if the source element
// is a `<button></button>`.
body.on("click", function (ev) {
  if ($(ev.target).is("button")) {
    console.log(ev.target);
  }
});
// Now you can add any number
// of `<button></button>`.
body.append(btnB);
body.append(btnC);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

Это называется «Event Delegation». Хорошие новости, это встроенная функция в jQuery: -)

var i = 11;
var body = $("body");
body.on("click", "button", function () {
  var letter = (i++).toString(36).toUpperCase();
  body.append($("<button>" + letter + "</button>"));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

17
задан Marco 7 March 2017 в 12:12
поделиться

3 ответа

См. help(Startup) и help(.libPaths), поскольку у вас есть несколько возможностей, которые могут быть установлены. Среди них параметр

  • R_LIBS_USER
  • , назначающий .libPaths() в .Rprofile или Rprofile.site

и т. Д.

В этом конкретном случае вам нужно вернуться в обратную сторону и отменить выборки \\\\The library/path/I/don't/want.

Чтобы в противном случае игнорировать его, вы должны переопределить его, используя явно [i] через

library("somePackage", lib.loc=.libPaths()[-1])

при загрузке пакета.

23
ответ дан Dirk Eddelbuettel 19 August 2018 в 02:49
поделиться
  • 1
    Большое спасибо, я просто установил .libPaths («C: / Program Files / R / R-3.2.1 / library»), и теперь это единственный путь, который показывает. – user3594490 29 July 2015 в 20:11
  • 2
    Интересно. Я думал, что это добавлено вместо того, чтобы переопределять? – Dirk Eddelbuettel 29 July 2015 в 20:35
  • 3
    И он уверен, что добавляет к существующему .libPaths() в моем блоке Unix. – Dirk Eddelbuettel 29 July 2015 в 20:40
  • 4
    В файле справки казалось, что нужно использовать команду для установки пути к библиотеке. Аналогично настройке рабочего каталога. Я мог ошибаться, но похоже, что это работает для меня. Первый сетевой путь больше не появился. Проблема в том, что при установке базового пакета я должен отключить его от сети или по умолчанию сохраняет программу на моем C: диске, а также копию в нашей сети. Я не могу запретить сохранение базовой библиотеки в сети, а только любые дополнительные пакеты, которые я устанавливаю. – user3594490 29 July 2015 в 22:46
  • 5
    @DirkEddelbuettel Я считаю, что эта функция не добавляет к существующему .libPaths(). Он принимает указанный путь (или вектор), добавляет путь к системе, если он не включен, и устанавливает. Любые другие пути, которые ранее были добавлены, в том числе связанные с пользователем, из процесса инициализации, должны быть явно сохранены с помощью .libPaths(c(mydir1,mydir2,.libPaths())) или некоторых таких. – user6702291 7 December 2016 в 17:35

Windows 7: Если ваш C:\Program Files (или везде, где R установлен) заблокирован для записи, как и мой, то вы получите разочарование в редактировании RProfile.site (как и я). Как указано выше, я обновил R_LIBS_USER, и он сработал. Однако даже после прочтения тонкого руководства несколько раз и обширного поиска, мне потребовалось несколько часов, чтобы сделать это. В духе сохранения чьего-то времени ...

Предположим, вы хотите, чтобы ваши пакеты находились в C:\R\Library:

  1. Создайте папку C:\R\Library
  2. Нажмите Start -> Control Panel -> User Accounts -> Change my environmental variables
  3. Появится окно Environmental Variables. Если вы видите R_LIBS_USER, выделите его и нажмите Edit. В противном случае нажмите New. Оба действия открывают окно с полями для Variable и Value.
  4. В моем случае R_LIBS_USER уже был там, и это значение было для моего рабочего стола. Я добавил путь к папке, которую я создал, разделен точкой с запятой, как указано выше. C:\R\Library;C:\Users\Eric.Krantz\Desktop\R stuff\Packages. ПРИМЕЧАНИЕ. Я мог бы удалить путь к местоположению рабочего стола и просто оставить C:\R\Library.
20
ответ дан Eric Krantz 19 August 2018 в 02:49
поделиться

Опираясь на ту же проблему (избегая пути по умолчанию в сети), я подошел к этому решению с подсказками, приведенными в других ответах.

Решение редактирует файл Rprofile, чтобы перезаписать переменная R_LIBS_USER, которая по умолчанию указывает на домашний каталог.

Здесь шаги:

  1. Создают целевую папку назначения для библиотек, например ~\target.
  2. Найдите файл Rprofile. В моем случае это было в C:\Program Files\R\R-3.3.3\library\base\R\Rprofile.
  3. Отредактируйте файл и измените определение переменной R_LIBS_USER. В моем случае я заменил эту строку file.path(Sys.getenv("R_USER"), "R", на file.path("~\target", "R",.

Документация, которая поддерживает это решение, здесь

Исходный файл с:

 if(!nzchar(Sys.getenv("R_LIBS_USER")))
     Sys.setenv(R_LIBS_USER=
                file.path(Sys.getenv("R_USER"), "R",
                          "win-library",
                          paste(R.version$major,
                                sub("\\..*$", "", R.version$minor),
                                sep=".")
                          )) 

Измененный файл:

if(!nzchar(Sys.getenv("R_LIBS_USER")))
     Sys.setenv(R_LIBS_USER=
                file.path("~\target", "R",
                          "win-library",
                          paste(R.version$major,
                                sub("\\..*$", "", R.version$minor),
                                sep=".")
                          ))
6
ответ дан Marco 19 August 2018 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: