函数未返回R中的输出

时间:2018-08-29 11:34:29

标签: r function

我有一个函数,它接受一个向量并返回一些输出。

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.datasecond.data

3 个答案:

答案 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.datasecond.data