-->

r功能不返回值r功能不返回值(R function not returning values)

2019-05-12 10:23发布

我写我的第一个R的功能。

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

然后什么也没有发生。 怀疑它是与被需要的回报。 不知道我怎么会写这个。

Answer 1:

要返回df ,简单的写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)
}

或者,即使在这种情况下更简单,省略了最后的分配:

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

如果最后一个表达式计算为一个结果对象, data.frame(..)的话,那么这得到封闭表达和明确的收益目标return可以省略的语句。

编辑:和之前卸下背蜱sep ,你右括号后

EDIT2:当然MrFlick的评论是正确的:唯一真正的问题与您的代码是反单引号,可能只是在这里一个错字在网站上。 即使是分配产生所分配的值作为结果对象,但它是不可见的。 因此,你可以指定它,但它不会自动打印在控制台上。



Answer 2:

您只需要在你的函数结束时评价对象,因此它会返回一个值。 请参见下面的简单的例子:

funA <- function(x) {
    a <- x
}

funB <- function(x) {
    b <- x
    b
}

funA(1) # prints nothing
funB(1) # prints 'b'
[1] 1

编辑:

作为@MrFlick指出,无论是funAfunB返回最后一个表达式的值,但funA不会打印出任何东西。 然而,如果分配的输出funA(1)的对象,该对象将产生的值1

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

这个故事的寓意是,你要么需要的输出分配IMDBmovierating到一个对象,或明确评估df在函数结束。



Answer 3:

看起来你只是有几个错别字。

试试这个,不要忘了,包括您的图书馆,以帮助人们避免回答你的时候。 :)

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


文章来源: R function not returning values
标签: r function movie