使用循环时R中Require/library调用的正确位置/最佳实践
我在R中有一个函数,它使用了一些库。我已经在函数本身中调用了这些库。当程序的主要部分运行时,可以多次调用此函数。函数打印数据,我可能不想运行 这是个问题吗?我想最好通过require或library给图书馆打一次电话。但是,将库调用放在程序的主要部分是没有意义的,因为函数可能根本不会被调用 功能如下:使用循环时R中Require/library调用的正确位置/最佳实践,r,recursion,while-loop,R,Recursion,While Loop,我在R中有一个函数,它使用了一些库。我已经在函数本身中调用了这些库。当程序的主要部分运行时,可以多次调用此函数。函数打印数据,我可能不想运行 这是个问题吗?我想最好通过require或library给图书馆打一次电话。但是,将库调用放在程序的主要部分是没有意义的,因为函数可能根本不会被调用 功能如下: CreateChartOfStrikeTimes <- function(Symbol) { filename = paste(Symbol, "All Strikes.csv", se
CreateChartOfStrikeTimes <- function(Symbol)
{
filename = paste(Symbol, "All Strikes.csv", sep=" ")
data = read.csv(filename, stringsAsFactors=FALSE)
colnames(data) <- c("Date", "Strike Crossed")
data$hour <- as.numeric(strftime(data$Date, format="%H"))
library(reshape)
hourcount <- melt(table(data$hour))
colnames(hourcount) <- c("Hour", "Strike.Crosses")
library(ggplot2)
chart <- ggplot(hourcount, aes(x = Hour, y = Strike.Crosses)) +
theme_bw() +
geom_bar(stat = "identity") +
labs(title=paste(Symbol,"Number of Strike Crosses Across All Fridays", sep=" "),
x = "Hour Of Day In Which Cross Occurred",
y = "Num Of Strike Crosses"
) +
geom_text(aes(label = Strike.Crosses, y = Strike.Crosses+1), size = 4) +
scale_x_continuous(breaks = hourcount$Hour)
ggsave(filename=paste(Symbol, ".pdf", sep=""), plot=chart, width=11, height=8.5,
units="in")
}
CreateChartOfStrikeTimes都不会重新加载已加载的命名空间,因此它只会为每个调用的“is it loaded”检查增加最小的开销。从help(library)
页面信息中,您可能应该使用require
,因为“require
是为在其他函数中使用而设计的;如果包不存在,它返回FALSE
,并给出警告(而不是library()
默认情况下的错误)require
设计用于函数内部<代码>重塑
是一个旧软件包,您应该升级到重塑2
。如果你正在做一个简单的熔化,你甚至可能不需要它。有一些基本函数,重塑
,堆栈
/取消堆栈
,它们可以在不加载包的情况下提供所需的功能。它们不会再次重新加载,所以我看不出您所做的有什么问题,特别是如果这只是一个个人的、本地的功能。另外,如果不想打印,可以执行类似于if(plot){require(ggplot2)more code}
的操作,以避免加载ggplot。在过去的一周里,我已经开始在我的函数中使用require。