Как я могу запустить функцию со строкой как формальной для функции? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь запустить функцию, которая изменяет значение для каждой строки кода, значение является строкой, и когда я запускаю функцию, 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 голосов
/ 11 января 2019

Я, честно говоря, немного смущен тем, что вы спрашиваете. Из того, что я понимаю, ваша проблема в том, что при запуске 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)
  }
0 голосов
/ 10 января 2019

Поскольку вы не возвращаете никакого значения в конце функции, вы не получаете никакого вывода.

Включая 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...