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)
}
然后什么也没发生。怀疑与需要return有关。不知道我会怎么写这个。
您只需要在函数末尾计算对象,这样它就会 return 一个值。请参阅下面的简单示例:
funA <- function(x) {
a <- x
}
funB <- function(x) {
b <- x
b
}
funA(1) # prints nothing
funB(1) # prints 'b'
[1] 1
编辑:
正如@MrFlick 指出的那样,funA
和 funB
return 都是对最后一个表达式的求值,但是 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
到returndf
,只需写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 对象,并且可以省略显式的 return
语句。
编辑:并删除 sep
之前和右括号
之后的反引号
edit2:MrFlick 的评论当然是正确的:您的代码唯一真正错误的是反引号,这可能只是网站上的错字。即使赋值也会产生赋值作为结果对象,但它是不可见的。因此,您可以分配它,但它不会自动打印在控制台上。
我正在编写我的第一个 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)
}
然后什么也没发生。怀疑与需要return有关。不知道我会怎么写这个。
您只需要在函数末尾计算对象,这样它就会 return 一个值。请参阅下面的简单示例:
funA <- function(x) {
a <- x
}
funB <- function(x) {
b <- x
b
}
funA(1) # prints nothing
funB(1) # prints 'b'
[1] 1
编辑:
正如@MrFlick 指出的那样,funA
和 funB
return 都是对最后一个表达式的求值,但是 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
到returndf
,只需写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 对象,并且可以省略显式的 return
语句。
编辑:并删除 sep
之前和右括号
edit2:MrFlick 的评论当然是正确的:您的代码唯一真正错误的是反引号,这可能只是网站上的错字。即使赋值也会产生赋值作为结果对象,但它是不可见的。因此,您可以分配它,但它不会自动打印在控制台上。