在 R 中将函数和代码从一个文件导出和导入到另一个文件
Export and import functions and code from one file to another in R
我刚开始使用 R,之前可能已经回答过这个问题。在 Javascript 和 Python 等其他语言中,可以将代码拆分为多个文件,然后在您的项目中从一个文件中导出函数并将其导入另一个文件中。
Python 中的例子是
要从一个文件导出:
def CountWords(words):
if words is not None:
NumberOfWords = [Eachword.count(' ') + 1 for Eachword in words]
return NumberOfWords
要导入另一个文件:
from wordcounter import CountWords
# use the CountWords function here
这在 R 中的等价物是什么?
从技术上讲,您可以:
foo <- function() {
message("Hello")
}
dput(foo, "foo.R")
foo2 <- source("foo.R")$value
foo2()
#> Hello
由 reprex package (v2.0.1)
于 2022-03-28 创建
但我从未见过有人这样做过,有点简陋的语法很好地表明我在这里写的并不是为了保存加载函数。您也可以使用 saveRDS(foo, "foo.rds")
保存函数并使用 readRDS("foo.rds")
读取它。请注意,在这两种情况下,函数的名称都不会存储,因此您需要使用 foo3 <- readRDS("foo.rds")
.
对其进行分配
我认为您通常会做的是创建一个名为(例如)“custom_functions.R”的文件来存储项目的所有函数,然后在每个函数的开头使用 source("custom_functions.R")
加载它们的脚本。
custom_functions.R:
# function to do stuff
foo <- function() {
message("Hello")
}
您的普通脚本:
source("custom_functions.R")
foo()
#> Hello
在这种情况下您不需要指定名称。
R 还可以非常简单地创建您的个人包,这是另一个不错的选择(参见 https://r-pkgs.org/)。
我刚开始使用 R,之前可能已经回答过这个问题。在 Javascript 和 Python 等其他语言中,可以将代码拆分为多个文件,然后在您的项目中从一个文件中导出函数并将其导入另一个文件中。
Python 中的例子是
要从一个文件导出:
def CountWords(words):
if words is not None:
NumberOfWords = [Eachword.count(' ') + 1 for Eachword in words]
return NumberOfWords
要导入另一个文件:
from wordcounter import CountWords
# use the CountWords function here
这在 R 中的等价物是什么?
从技术上讲,您可以:
foo <- function() {
message("Hello")
}
dput(foo, "foo.R")
foo2 <- source("foo.R")$value
foo2()
#> Hello
由 reprex package (v2.0.1)
于 2022-03-28 创建但我从未见过有人这样做过,有点简陋的语法很好地表明我在这里写的并不是为了保存加载函数。您也可以使用 saveRDS(foo, "foo.rds")
保存函数并使用 readRDS("foo.rds")
读取它。请注意,在这两种情况下,函数的名称都不会存储,因此您需要使用 foo3 <- readRDS("foo.rds")
.
我认为您通常会做的是创建一个名为(例如)“custom_functions.R”的文件来存储项目的所有函数,然后在每个函数的开头使用 source("custom_functions.R")
加载它们的脚本。
custom_functions.R:
# function to do stuff
foo <- function() {
message("Hello")
}
您的普通脚本:
source("custom_functions.R")
foo()
#> Hello
在这种情况下您不需要指定名称。
R 还可以非常简单地创建您的个人包,这是另一个不错的选择(参见 https://r-pkgs.org/)。