R函数不返回值

Phi*_*ack 3 r function movie

我正在写我的第一个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)
}
Run Code Online (Sandbox Code Playgroud)

然后什么都没发生.怀疑它与需要返回有关.不知道我怎么写这个.

sth*_*len 7

要返回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)
}
Run Code Online (Sandbox Code Playgroud)

或者,在这种情况下更简单,省略最后一项任务:

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

如果最后一个表达式求值为结果对象,data.frame(..)那么这将获得封闭表达式的返回对象,并且可以省略显式return语句.

编辑:并sep在关闭括号之前和之后删除反向标记

编辑2:当然,MrFlick的评论是正确的:你的代码唯一真正错误的是后面的标记,可能只是网站上的拼写错误.即使是赋值也会将指定的值作为结果对象生成,但它是不可见的.因此,您可以分配它,但它不会自动打印在控制台上.


Ric*_*der 5

您只需在函数末尾评估该对象,以便它返回一个值。请参阅下面的简单示例:

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

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

funA(1) # prints nothing
funB(1) # prints 'b'
[1] 1
Run Code Online (Sandbox Code Playgroud)

编辑:

正如 @MrFlick 指出的, 和funAfunB返回最后一个表达式的计算结果,但funA不会打印任何内容。但是,如果您分配对象的输出funA(1),该对象将产生值1

z <- funA(1)
z
[1] 1
z == funB(1)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

这个故事的寓意是,您要么需要将 的输出分配给一个对象,要么在函数末尾IMDBmovierating显式求值。df