功能:将返回的数据框保存到工作区

Chr*_*ume 3 r function

我真的无法解决这个问题:

我有一个返回数据帧的函数。但是,虽然我希望将数据帧存储在工作空间中,但是数据帧仅在控制台中打印。我该如何实现?

样本数据:

n <- 32640
t <- seq(3*pi,n)
data_sim <- 30+ 2*sin(3*t)+rnorm(n)*10
data_sim <- floor(data_sim)
Run Code Online (Sandbox Code Playgroud)

功能:

compress <- function (name, SR){
  ## -------------------------------------------------------
  ## COMPRESSION
  library(zoo)
  data <- get(name)
  if (is.data.frame(data)==F){
    data = as.data.frame(data)
  }
  SR <- SR
  acrossmin <- 60  
  a <- nrow(data) 
  m <- acrossmin*SR*60  
  data_compress <- matrix(NA, nrow = a/m) 
  no_mov_subset <- matrix(NA, nrow = m) 
  for (i in 1:(a/m)){
    subset <- data[(((i-1)*m)+1):((i*m)),] 
    b <- length(subset)
    for (k in 1:b){
      r <- subset[k]
      if (r == 0){              
        no_mov_subset[k] <- 0    
      } else {
        no_mov_subset[k] <- 1
      }
      sum_no_mov_subset <- sum(no_mov_subset) 
      data_compress[i] <- sum_no_mov_subset  
    }
   colnames(data_compress) <- c("activity_count")
return(data_compress)
}
Run Code Online (Sandbox Code Playgroud)

运行代码:

compress("data_sim", 4/60)
Run Code Online (Sandbox Code Playgroud)

显然,该函数返回了一些内容,但是我希望将其存储在工作空间中而不是返回!

Rom*_*anB 5

代替return命令,您可以使用

data_compress <<- data_compress
Run Code Online (Sandbox Code Playgroud)

这样,数据框就存储在工作空间中。因此,您的函数如下所示:

compress <- function (name, SR){
  ## -------------------------------------------------------
  ## COMPRESSION
  library(zoo)
  data <- get(name)
  if (is.data.frame(data)==F){
        data = as.data.frame(data)
  }
  SR <- SR
  acrossmin <- 60  
  a <- nrow(data) 
  m <- acrossmin*SR*60  
  data_compress <- matrix(NA, nrow = a/m) 
  no_mov_subset <- matrix(NA, nrow = m) 
  for (i in 1:(a/m)){
        subset <- data[(((i-1)*m)+1):((i*m)),] 
        b <- length(subset)
        for (k in 1:b){
              r <- subset[k]
              if (r == 0){              
                    no_mov_subset[k] <- 0    
              } else {
                    no_mov_subset[k] <- 1
              }
              sum_no_mov_subset <- sum(no_mov_subset) 
              data_compress[i] <- sum_no_mov_subset  
        }
        colnames(data_compress) <- c("activity_count")
        data_compress <<- data_compress
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:如Heroka和hrbrmstr所评论,此解决方案不安全。最好将函数调用的输出分配给变量:

data_compr <- compress("data_sim", 4/60)
Run Code Online (Sandbox Code Playgroud)

  • 的确如此,但我认为通常最好编写没有副作用的函数,因此只需返回一个数据帧并将其分配给新变量即可。在这种情况下,如果要两次运行该功能怎么办?它将覆盖第一次运行的结果。 (3认同)