Получение декларации переменной - PullRequest
1 голос
/ 08 сентября 2011

Как я могу найти, как я впервые объявил определенную переменную, когда мне несколько сотен линии вниз от того, где я впервые объявил об этом. Например, я объявил следующее:

a <- c(vectorA,vectorB,vectorC) 

и теперь я хочу посмотреть, как я это объявил. Как я могу это сделать? Благодарю.

Ответы [ 4 ]

8 голосов
/ 08 сентября 2011

Вы можете попробовать использовать команду history:

history(pattern = "a <-")

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

В самом деле, если вы наберете history в командной строке, то, похоже, не будет ничего сложнее, чем сохранитьтекущую историю в временном файле, загрузив ее обратно с помощью readLines и затем выполнив поиск с использованием grep.Должно быть достаточно просто изменить эту функцию, чтобы она включала больше функций ... например, эта модификация заставит ее вернуть совпадающие строки, чтобы вы могли сохранить ее в переменной:

myHistory <- function (max.show = 25, reverse = FALSE, pattern, ...) 
{
    file1 <- tempfile("Rrawhist")
    savehistory(file1)
    rawhist <- readLines(file1)
    unlink(file1)
    if (!missing(pattern)) 
        rawhist <- unique(grep(pattern, rawhist, value = TRUE, 
            ...))
    nlines <- length(rawhist)
    if (nlines) {
        inds <- max(1, nlines - max.show):nlines
        if (reverse) 
            inds <- rev(inds)
    }
    else inds <- integer()
    #file2 <- tempfile("hist")
    #writeLines(rawhist[inds], file2)
    #file.show(file2, title = "R History", delete.file = TRUE)
    rawhist[inds]
}
2 голосов
/ 08 сентября 2011

Я предполагаю, что вы используете консоль R по умолчанию. Если вы работаете в Windows, вы можете Файл -> Сохранить историю и открыть файл в вашем любимом текстовом браузере, или вы можете использовать функцию savehistory() (см. help(savehistory)).

Что вам нужно сделать, это получить (хорошую) IDE или, по крайней мере, достойный текстовый редактор. Вы получите выгоду от свертывания кода, окраски синтаксиса и многого другого. Есть множество вариантов, из Tinn-R, VIM, ESS, Eclipse + StatET, RStudio или RevolutionR среди прочих .

1 голос
/ 08 сентября 2011

Вы можете запустить grep 'a<-' .Rhistory из терминала (при условии, что у вас cd d в вашем рабочем каталоге). ESS имеет несколько очень полезных функций поиска в истории, таких как (comint-history-isearch-backward-regexp), которые по умолчанию связаны с M-r.

Для получения дополнительной информации обратитесь к руководству ESS: http://ess.r -project.org / Manual / ess.html

0 голосов
/ 09 сентября 2011

Когда вы определяете функцию, R сохраняет исходный код функции (сохраняя форматирование и комментарии) в атрибуте с именем «source». Когда вы вводите название функции, вы печатаете это содержимое.

Но он не делает это с переменными. Вы можете удалить переменную, которая генерирует выражение, которое будет генерировать значение переменной, но это не обязательно должно быть исходное выражение. Например, если у вас есть b <- c(17, 5, 21), deparse(b) выдаст строку "c(17, 5, 21)".

В вашем примере, однако, результат не будет "c (vectorA, vectorB, vectorC)", это будет выражение, которое выдает комбинированный результат из ваших трех векторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...