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

标签 r function

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

我有一个返回数据框的函数。但是,数据框仅打印在我的控制台中,尽管我希望将其存储在工作空间中。我怎样才能做到这一点?

样本数据:

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

功能:
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)
}

运行代码:
compress("data_sim", 4/60)

显然,该函数返回了一些东西,但我希望它存储在工作区中而不是返回!

最佳答案

您可以使用代替 return 命令

data_compress <<- data_compress

这样,数据框就存储在工作区中。所以你的函数看起来像这样:
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
  }
}

编辑:正如 Heroka 和 hrbrmstr 所评论的,这个解决方案并不安全。最好将函数调用的输出分配给一个变量:
data_compr <- compress("data_sim", 4/60)

关于r - 功能:将返回的数据框保存到工作区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32563153/

相关文章:

R:导入data.table包命名空间,内存消耗无法解释的跳跃

r - 如何在 OSX 上自动加载 R 中的设置?如何找到 R_HOME,配置 Rprofile.site 等?

r - Predict.glm(..., type = "response", se.fit = TRUE) 返回什么标准错误?

R data.table 条件聚合

不能为每个元素洗牌一次

JavaScript - 传递未定义的参数与忽略它相同吗?

r - R 中的函数式编程 : illustration with vandermonde matrix

javascript面向对象函数调用初学者问题

php - is_int() 和 ctype_digit() 有区别吗?

c++ - 修改vector的元素(按值,按引用)函数C++