Создайте пользовательскую функцию в R
Извините, если это было задано раньше, но я не могу найти ответ.
Скажем, я пишу небольшую функцию в R
add2<-function(a){
return(a+2)
}
Я сохраняю его как add2.R в своем домашнем каталоге (или в любом каталоге). Как мне найти R, чтобы найти его?
> add2(4)
Error: could not find function "add2"
Я знаю, что могу открыть script, скопировать/вставить его в консоль, запустить, а затем он работает. Но как я могу получить его встроенный, поэтому, если я открою и закрою R, он все равно будет работать без копирования и вставки в него?
Ответы
Ответ 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")