【发布时间】:2019-03-27 01:17:54
【问题描述】:
尝试将我希望它为它创建的数据框命名的函数传递给函数,然后将其保存到全局环境中。
我正在尝试通过过滤值来自动创建作为其他数据帧子集的数据帧;因为我正在创建其中的 43 个,所以我正在编写一个可以自动执行的函数:
- a) 然后将包含某个字符串的子集行放入它自己的 data.frame 中
- b) 在该字符串之后命名一个数据框并将其保存到我的全局环境中。 (a)中的字符串也是我希望它在b)中命名data.frame的后缀)
我可以做到 a) 很好,但在 b) 方面遇到了问题。
假设我有一个数据集,其中包含一个名为“团队”的列(详细说明该成员所属的团队):
original.df <- read_csv("../original_data_set")
我创建了一个函数来根据其中一列中的值拆分该数据集...
split.function <- function(string){
x <- original.df
as.name(string) <<- filter(x, str_detect(`Team`, string))
}
...然后使用名称保存数据框:
split.by.candidate('Team.Curt')
我不断得到:
> Error in as.name(x) <<- filter(y, str_detect(`Receiving Committee`, x)) :
object 'x' not found
但是当我使用包含术语Team.Curt 的行执行此操作时,我只想看到Team.Curt 在我的全局环境中保存为data.frame
【问题讨论】:
-
我试图重写问题以减少重复和冗长。本质上,您希望参数化要在
assign语句中使用的数据框的字符串名称,仅此而已。 (您也想在过滤操作中使用相同的字符串这一事实是无关紧要的。)但是您唯一的问题是您省略了assign(..., envir = .GlobalEnv)。而as.name(string) <<- ...不是你做分配的方式。就是这样。 -
你没有问的问题的答案是,如果你做了很多这样的事情,tidyverse 可能是一个更好的方法。
标签: r