R function not returning values

后端 未结 3 1316
后悔当初
后悔当初 2020-11-28 16:34

I am writing my first R function.

IMDBmovierating <- function(movie){
  link <- paste(\"http://www.omdbapi.com/?t=\", movie, \"&y=&plot=short&a         


        
相关标签:
3条回答
  • 2020-11-28 17:16

    Looks like you just had a few typos.

    Try this and dont forget to include your library to help people out when answering you. :)

    library(RJSONIO)    
    IMDBmovierating <- function(movie){
    link <- paste("http://www.omdbapi.com/?t=", movie,"&y=&plot=short&r=json", sep = "")
        jsonData <- fromJSON(link)
        df <- data.frame(jsonData)
    }
    
    test <- IMDBmovierating(1984)
    test
    
    0 讨论(0)
  • 2020-11-28 17:20

    To return df, simply write return(df):

    IMDBmovierating <- function(movie){
      link <- paste("http://www.omdbapi.com/?t=", movie, "&y=&plot=short&r=json", sep = "")
      jsonData <- fromJSON(link)
      df <- data.frame(jsonData)
      return(df)
    }
    

    or, even simpler in this case, omit the last assignment:

    IMDBmovierating <- function(movie){
      link <- paste("http://www.omdbapi.com/?t=", movie, "&y=&plot=short&r=json", sep = "")
      jsonData <- fromJSON(link)
      data.frame(jsonData)
    }
    

    If the last expression evaluates to a result object, as data.frame(..) does, then this gets the return object of the enclosing expression and the explicit return statement may be omitted.

    edit: and remove the back-ticks before sep and after you closing parenthesis

    edit2: Of course MrFlick's comment is correct: the only thing really wrong with your code are the back-ticks that probably are simply a typo here on the site. Even the assignment produces the assigned value as a result object, but it is invisible. Hence, you can assign it, but it is not automatically printed on the console.

    0 讨论(0)
  • 2020-11-28 17:25

    You simply need to evaluate the object at the end of your function so it will return a value. See the simple example below:

    funA <- function(x) {
        a <- x
    }
    
    funB <- function(x) {
        b <- x
        b
    }
    
    funA(1) # prints nothing
    funB(1) # prints 'b'
    [1] 1
    

    EDIT:

    As @MrFlick points out, both funA and funB return the evaluation of the last expression, but funA will not print anything. However, if you assign the output of funA(1) an object, that object will produce the value 1:

    z <- funA(1)
    z
    [1] 1
    z == funB(1)
    [1] TRUE
    

    The moral of the story is that you either need to assign the output of IMDBmovierating to an object, or explicitly evaluate df at the end of the function.

    0 讨论(0)
提交回复
热议问题