我正在尝试运行一个为每行代码更改一个值的函数,该值是一个字符串,当我运行该函数时,y不会执行任何操作,甚至不会显示错误消息。如果将函数分配给数据框,它将显示为0个元素,但是如果我将函数内的代码作为单个元素运行,它将运行并在函数内执行代码
id="187B339C-26F8-40A1-948F-0F9803761850"
outsporzonaprueba<-function(guid55){
o1<-filter(mydata, desc=="Bunt Out" | desc=="Fly out" | desc=="Ground out" | desc=="Strikeout Looking" | desc=="Strikeout Swinging", zone=="zona1", guid5==guid55)
o2<-filter(mydata, desc=="Bunt Out" | desc=="Fly out" | desc=="Ground out" | desc=="Strikeout Looking" | desc=="Strikeout Swinging", zone=="zona2", guid5==guid55)
o3<-filter(mydata, desc=="Bunt Out" | desc=="Fly out" | desc=="Ground out" | desc=="Strikeout Looking" | desc=="Strikeout Swinging", zone=="zona3", guid5==guid55)
}
opz<-outsporzonaprueba(id)
答案 0 :(得分:0)
由于在函数末尾没有返回任何值,因此没有任何输出。
包括return(list(o1,o2,o3))
应该给出输出。
id="187B339C-26F8-40A1-948F-0F9803761850"
outsporzonaprueba<-function(data, guid55){
o1<-filter(data, desc=="Bunt Out" | desc=="Fly out" | desc=="Ground out" | desc=="Strikeout Looking" | desc=="Strikeout Swinging", zone=="zona1", guid5==guid55)
o2<-filter(data, desc=="Bunt Out" | desc=="Fly out" | desc=="Ground out" | desc=="Strikeout Looking" | desc=="Strikeout Swinging", zone=="zona2", guid5==guid55)
o3<-filter(data, desc=="Bunt Out" | desc=="Fly out" | desc=="Ground out" | desc=="Strikeout Looking" | desc=="Strikeout Swinging", zone=="zona3", guid5==guid55)
return(list(o1,o2,o3)) }
opz<-outsporzonaprueba(data= mydata,guid55 = id)
opz
答案 1 :(得分:0)
老实说,我对您的要求感到困惑。
据我了解,您的问题是,当您运行outsporzonaprueba(id)
时,函数内部的数据帧(即o1
,o2
和o3
)没有被创建。
这是正确的吗?
如果是这样,那是因为它们是在函数环境中定义的。您希望在全局环境中分配它们,因此请使用<<-
而不是<-
。
例如
id="187B339C-26F8-40A1-948F-0F9803761850"
outsporzonaprueba <- function(guid55) {
o1 <<- filter(mydata, ..., guid5==guid55)
o2 <<- filter(mydata, ..., guid5==guid55)
o3 <<- filter(mydata, ..., guid5==guid55)
}
opz <- outsporzonaprueba(id)
更安全的解决方案
<<-
有一个小问题,即它将递归地检查父环境中分配的变量(如果找不到该变量,则在全局范围内创建该变量)。
如果要确定定义变量的范围,请使用assign()
:
outsporzonaprueba <- function(guid55) {
assign('o1', filter(mydata, ..., guid5==guid55), envir = .GlobalEnv)
assign('o2', filter(mydata, ..., guid5==guid55), envir = .GlobalEnv)
assign('o3', filter(mydata, ..., guid5==guid55), envir = .GlobalEnv)
}