繁体   English   中英

R函数不返回值

[英]R function not returning values

我正在写我的第一个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)
}

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

要返回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(..)那样,那么这将获得封闭表达式的返回对象,并且可以data.frame(..)return语句。

编辑:并在sep之前和关闭括号后删除后退

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

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

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

看起来你只是有一些错别字。

试试这个,不要忘记包括你的图书馆,以帮助人们回答你。 :)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM