我真的无法解决这个问题:
我有一个返回数据帧的函数。但是,虽然我希望将数据帧存储在工作空间中,但是数据帧仅在控制台中打印。我该如何实现?
样本数据:
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)
显然,该函数返回了一些内容,但是我希望将其存储在工作空间中而不是返回!
代替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)