如何运行带有形式形式的字符串的函数?

时间:2019-01-10 19:16:37

标签: r

我正在尝试运行一个为每行代码更改一个值的函数,该值是一个字符串,当我运行该函数时,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)

2 个答案:

答案 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)时,函数内部的数据帧(即o1o2o3)没有被创建。
这是正确的吗?

如果是这样,那是因为它们是在函数环境中定义的。您希望在全局环境中分配它们,因此请使用<<-而不是<-

例如

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)
  }