我正在写我的第一个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)
}
然后什么都没发生。怀疑它与需要返回有关。不知道我怎么写这个。
答案 0 :(得分: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)
}
或者,在这种情况下更简单,省略最后一项任务:
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的评论是正确的:你的代码唯一真正的错误就是可能只是网站上的拼写错误。即使分配也会将指定的值作为结果对象生成,但它是不可见的。因此,您可以分配它,但它不会自动打印在控制台上。
答案 1 :(得分:3)
您只需要在函数末尾评估对象,这样它就会返回一个值。请参阅下面的简单示例:
funA <- function(x) {
a <- x
}
funB <- function(x) {
b <- x
b
}
funA(1) # prints nothing
funB(1) # prints 'b'
[1] 1
修改强>
正如@MrFlick指出的那样,funA
和funB
都会返回最后一个表达式的评估,但funA
不会打印任何内容。但是,如果为funA(1)
分配对象的输出,则该对象将生成值1
:
z <- funA(1)
z
[1] 1
z == funB(1)
[1] TRUE
故事的寓意是你需要将IMDBmovierating
的输出分配给一个对象,或者在函数末尾显式评估df
。
答案 2 :(得分:0)
看起来你只是有一些错别字。
尝试这一点,不要忘记包括你的图书馆,以帮助人们回答你。 :)
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