Подтвердить что ты не робот

Создайте пользовательскую функцию в R

Извините, если это было задано раньше, но я не могу найти ответ.

Скажем, я пишу небольшую функцию в R

add2<-function(a){
return(a+2)
}

Я сохраняю его как add2.R в своем домашнем каталоге (или в любом каталоге). Как мне найти R, чтобы найти его?

> add2(4)
Error: could not find function "add2"

Я знаю, что могу открыть script, скопировать/вставить его в консоль, запустить, а затем он работает. Но как я могу получить его встроенный, поэтому, если я открою и закрою R, он все равно будет работать без копирования и вставки в него?

4b9b3361

Ответ 1

Один легкий вариант:

dump("add2", file="myFunction.R")

## Then in a subsequent R session
source("myFunction.R")

Альтернатива:

save("add2", file="myFunction.Rdata")

## Then just double click on "myFunction.Rdata" to open  
## an R session with add2() already in it 

## You can also import the function to any other R session with
load("myFunction.Rdata")

До тех пор, пока вы не будете готовы упаковывать функции в свой собственный пакет, хранение их в хорошо организованных текстовых файлах source() -ready (как в первом примере выше), вероятно, является лучшей стратегией. См. этот вопрос с высоким разрешением ВОПРОСА для некоторых примеров того, насколько опытные пользователи используют этот подход на практике.

Ответ 2

Прежде чем вызывать функцию (например, в начале script), вы должны source файл, содержащий вашу определенную пользователем функцию /s, то есть:

source("add2.R") # this executes add2.R script loading add2 function

В принципе, функция source выполняет код, включенный в аргумент script, переданный как аргумент. Поэтому, если файл содержит только определения функций, он загружает функцию в память для будущего использования.

Ответ 3

Если вы хотите запустить его автоматически, вам нужно настроить запуск script, а затем использовать один из методов, описанных в ответах выше.

/Library/Frameworks/R.framework/Versions/2.15/Resources/etc/ (для mac) - расположение Rprofile.site, которое необходимо отредактировать соответствующим образом.

Моя версия:

.First <- function()
{ 
    dir='~/Desktop/Infobase/R/0_init/0_init.R'
    if(file.exists(dir))
    {
    source(dir, chdir = TRUE) 
    } else {cat("startup file is not found at:",dir)}
    cat("\nWelcome at", date(), "\n")
}    

.Last <- function()
{ 
cat("\nGoodbye at ", date(), "\n")
}

Обратите внимание, что после того, как вы получили 1 R script, вам больше не нужно вводить этот файл. Просто сделайте все, что вам нужно, из файла, который вы получили. В моем случае файл "0_init.R" не содержит функций, он просто содержит загрузку других скриптов. Ну, у тебя есть идея.

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

используйте "attach", "detach", "search" и т.д.

attach(FUN,name="af2tr")