【发布时间】:2018-08-28 13:46:09
【问题描述】:
我在从 R 中的循环返回数据帧时遇到问题。我有一组函数可以读取文件并将它们转换为数据帧以供更大的项目使用/可视化。
我有一个要传递的文件名列表:
# list of files to read
frameList <-c("apples", "bananas", "pears")
此函数遍历列表并运行函数以创建数据框(如果它们尚不存在)。
populateFrames <- function(){
for (frame in frameList){
if (exists(frame) && is.data.frame(get(frame))){
# do nothing
}
else {
frame <- clean_data(gather_data(frame))
}
}
}
执行时,函数运行时没有错误,但不会将任何数据帧保存到环境中。
我可以手动运行同样的东西并保存一个数据框:
# manually create "apples" data frame
apples <- clean_data(gather_data(frameList[1]))
通过阅读此处的类似问题,我发现 assign() 用于类似的事情。但是和以前一样,我可以很好地手动运行代码;但是当放在循环中时,没有数据框被保存到环境中。
# returns a data frame, "apples" to the environment
assign(x = frame[1], value = clean_data(gather_data(frame[1])))
【问题讨论】:
-
您的问题是您正在函数的本地范围内创建数据框,并且当您的程序离开该范围时,您的数据不会被保存。尝试在函数外部运行 for 循环。
-
在 R 术语中,
c("apples", "bananas", "pears")是一个字符向量,而不是一个列表。这是一个重要的区别,因为解决方案可能会因所涉及的对象类型而异。