如何在R中的用户定义函数中不使用required()[duplicate]

nukf8bse  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(116)

此问题已在此处有答案

Is it a good practice to call functions in a package via ::(1个答案)
4天前关闭。
这是可重复的最小数据集和函数,因为它不是重点。我的真实的函数非常复杂,但这不是这里的重点。

id <- 1:30
x<-rnorm(30,1,10)
y<-rnorm(30,1,10)

data<-data.frame(id,x,y)

try<-function(data,
             x,
             y){
  
  require(tidyverse)
  
  data<-data %>%
    mutate(new=x+y)
  
  return(data)
}

我得到的反馈是
1)一般来说,避免在函数中使用require()或library()是一个很好的做法。
然而,我在我的用户定义函数中使用了tidyverse语法(%〉% etc),所以如果我不使用require(),我会很困惑我有什么选择。

6jygbczu

6jygbczu1#

一般来说,最好在一个地方列出所有依赖项。如果你的分析只包含一个脚本,那么依赖项应该列在脚本的顶部。如果你使用的是R项目,你可以使用一个单独的脚本,或者更好的是使用renv。如果你使用的是R包,依赖项会在包文档中列出。
因此,在您的情况下,您可以:

1:在脚本之上加载所需的包:

library(tidyverse)
id <- 1:30
x<-rnorm(30,1,10)
# rest of code

2.使用“::”只调用需要的函数:

# rest of code
try<-function(data,
             x,
             y){
  
  data<-data %>%
    dplyr::mutate(new=x+y)
  
  return(data)
}

第二种方法可能更适合只使用给定包中的少数函数的情况。另外,请注意,要使dplyr::mutate工作,您需要安装dplyr包。

相关问题