使用循环时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

我在R中有一个函数,它使用了一些库。我已经在函数本身中调用了这些库。当程序的主要部分运行时,可以多次调用此函数。函数打印数据,我可能不想运行

这是个问题吗?我想最好通过require或library给图书馆打一次电话。但是,将库调用放在程序的主要部分是没有意义的,因为函数可能根本不会被调用

功能如下:

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。