【发布时间】:2019-06-27 00:11:49
【问题描述】:
假设我们有以下数据框:
# Data
Id <- c(1,2,3,4,5,6,7,8,9,10)
Type <- c("Beginner", "Expert", "Intermediate", "Beginner",
"Professional", "Expert", "Intermediate", "Professional",
"Professional", "Expert")
Response<- c(1,1,2,2,1,2,1,2,1,1)
Successful <- data.frame(Id, Type, Response)
Successful
# Dataframe
# Successful
Id Type Response
1 Beginner 1
2 Expert 1
3 Intermediate 2
4 Beginner 2
5 Professional 1
6 Expert 2
7 Intermediate 1
8 Professional 2
9 Professional 1
10 Expert 1
我知道我可以通过执行以下操作将其作为对象 (DFRespType) 存储在全局环境中:
DFRespType <-
as.data.frame(round(100*prop.table(table(Successful$Response,
Successful$Type),2), 1))
但是,相反,我想创建一个用于存储对象的函数,以提高执行此操作的效率。下面我尝试制作StoreDF函数:
StoreDF <- function(DFName, dataset, variable1, variable2){
DFName <- as.data.frame(round(100*prop.table(table(dataset$variable1,
dataset$variable2),2), 1))
}
但是当我尝试按以下方式使用它时,什么都没有存储:
StoreDF(DFRespType, Successful, Response, Type)
对此的任何帮助将不胜感激。
【问题讨论】:
-
在
StoreDF()函数定义中尝试使用<<-运算符而不是<-。因此,DFName <- as.data.frame(some_table)变为DFName <<- as.data.frame(some_table) -
这是对函数的误用。您正试图通过副作用产生一个对象。不要这样做。您可能想研究在列表中存储多个 data.frames。看到这个帖子:make list of data.frames.
标签: r function plot global store