我有一个函数,它接受一个向量并返回一些输出。
my.function <- function(x){
if (1 %in% x) {
first.data <- data.frame(a = c(1, 2), b = c("a", "b"))
return(first.data)
}
if (2 %in% x){
second.data <- data.frame(a = c("I", "II"), b = c("a", "b"))
return(second.data)
}}
my.function(x = c(1, 2))
a b
1 a
2 b
为什么我的函数不能同时返回first.data
和second.data
?
答案 0 :(得分:3)
您可以使用lapply
来简单地调用函数,如下所示:
lapply(1:2,my.function)
输出:
[[1]]
a b
1 1 a
2 2 b
[[2]]
a b
1 I a
2 II b
如果您想采用自己的方法,那么:
my.function <- function(x){
for(i in 1:length(x)){ # This will call for each element in x
if (1 %in% x) {
first.data <- data.frame(a = c(1, 2), b = c("a", "b"))
data = (first.data) # Store intermediate result to data
}
if (2 %in% x){
second.data <- data.frame(a = c("I", "II"), b = c("a", "b"))
data=rbind(data,second.data) # Row wise bind the result
}
return(data) # Return the data
}
}
my.function(x = c(1, 2))
输出:
a b
1 1 a
2 2 b
3 I a
4 II b
答案 1 :(得分:3)
无论何时执行return
语句,它都不会执行函数中的后续步骤。如果要返回两个输出,请使用return
发送最终输出。
my.function <- function(x){
first.data<-data.frame()
second.data<-data.frame()
if (1 %in% x) {
first.data <- data.frame(a = c(1, 2), b = c("a", "b"))
}
if (2 %in% x){
second.data <- data.frame(a = c("I", "II"), b = c("a", "b"))
}
return(list(first.data,second.data))
}
答案 2 :(得分:1)
这应该有效:
my.function <- function(x){
first.data <- data.frame()
second.data <- data.frame()
if (1 %in% x) {
first.data <- data.frame(a = c(1, 2), b = c("a", "b"))
}
if (2 %in% x){
second.data <- data.frame(a = c("I", "II"), b = c("a", "b"))
}
list(first.data, second.data) # last element not declared is returned.
}
不需要return
。
请记住,如果将if-statement
评估为FALSE
,则将抛出错误,因为该函数找不到first.data
或second.data
。