R Как использовать Dynami c Scoping в приятной работе - PullRequest
0 голосов
/ 14 марта 2020

Я создаю функцию, которой нужен объект, не определенный для создания графика. Поскольку я хочу поддерживать чистоту функции без множества аргументов, я подумал о том, чтобы использовать динамическую область видимости. У меня проблема, когда нужный объект создается в функции lapply.

В первой ситуации для функции f нужен объект text , и создаются оба в счастливую функцию. Он работает, как и ожидалось.

attach(mtcars)

lapply(seq(2), function(x) {

  text = paste0('Title-', x)
  f = function( ) { plot(wt, mpg, main = text, pch = 20) }
  return(f())

})

Но если функция f создана ранее, текст не найден. Я ожидал, что функция найдет текст , созданный в функции lapply

f = function( ) { plot(wt, mpg, main = text, pch = 20) }

lapply(seq(2), function(x) {

  text = paste0('Title-', x)
  return(f())

})

Как я могу повторно использовать функцию f , ранее созданную с переменными, созданными в функцию lapply? Возможно << - задание является решением, но оно не рекомендуется. Спасибо </p>

1 Ответ

1 голос
/ 14 марта 2020

Вы должны специально искать text в кадре вызова:

f <- function() plot(wt, mpg, main = get("text", envir = parent.frame()), pch = 20)

lapply(seq(2), function(x) {
  text = paste0('Title-', x)
  return(f())
})

enter image description here enter image description here

...