我试图打包一些用于数据分析的代码,以便其他工作人员可以使用它。目前,我一直试图编写一个简单的函数,该函数从数据记录器生成的特定文件类型中导入数据并修剪它以供其他函数使用。这是代码:
import<-function(filename,type="campbell",nprobes){
if (filename==TRUE){
if (type=="campbell"){
message("File import type is from Campbell CR1000")
flux.data<<-read.table(filename,sep=",",header=T,skip=1)
flux.data<<-flux.data[,-c(1,2)];flux.data<<-flux.data[-c(1,2),]
if (nprobes=="missing"){
nprobes<-32
}
flux.data<<-flux.data[,c(1:nprobes)]
flux.data.names<<-colnames(flux.data) #Saves column names
}
}
}
理想情况下,结果将是数据框/矩阵flux.data
以及保留列标题flux.data.names
的伴随向量/列表。代码运行并且函数执行时没有错误,但输出没有被保留。我通常使用<<-
来绕过功能机箱,但在这种情况下它不起作用 - 有什么建议吗?
我认为真正的问题是我不太了解外壳是如何工作的,尽管阅读量很大......我应该使用environment
来分配功能中的环境吗?
答案 0 :(得分:0)
用户joran在上面的评论中回答了我的问题:
关键问题只在于如何编写函数:开始时的条件(if filename==TRUE
)旨在查看是否指定了filename,而是检查它是否字面上等于{{1} }。结果是条件永远不会被满足,并且没有函数输出。这是修正它的原因:
TRUE
他指出的另一个很酷的事情是我不需要import<-function(filename,type="campbell",nprobes){
if (exists(filename){
if (type=="campbell"){
#etc....
运算符来使用函数输出,而是可以编写<<-
。这是一种更灵活的方法,帮助我更好地理解功能封装。