Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 函数未按预期方式计算变量_R_Function_Frequency_Tidyverse_Nse - Fatal编程技术网

R 函数未按预期方式计算变量

R 函数未按预期方式计算变量,r,function,frequency,tidyverse,nse,R,Function,Frequency,Tidyverse,Nse,我正在尝试编写一个R函数来生成一个频率表,这样我就可以在不重复输入的情况下标准化格式等。唯一的问题是我不能让它正确地计算分组变量 下面是一些代码,用于获取迷你数据集以重现问题: library(tidyverse) id <- sample(1:500, 5) factors <- sample(1:3, 5, replace = TRUE) data <- data.frame(id, factors) freqTable <- function(x, fie

我正在尝试编写一个R函数来生成一个频率表,这样我就可以在不重复输入的情况下标准化格式等。唯一的问题是我不能让它正确地计算分组变量

下面是一些代码,用于获取迷你数据集以重现问题:

 library(tidyverse)
 id <- sample(1:500, 5)
 factors <- sample(1:3, 5, replace = TRUE)
 data <- data.frame(id, factors)
 freqTable <- function(x, field){

     Table <- x %>%
         group_by(field) %>%
         summarise(N = n(), Percent = n()/NROW(x)*100) %>%
         mutate(C.Percent = cumsum(Percent))
     return(Table)
 }
 freqTable(data, "factors")
库(tidyverse)

对不起,我刚刚想好了

分组人(字段)

我认为这可能与非标准评估有关,但我还不太了解它

这:

frektable%
+总结(N=N(),百分比=N()/NROW(x)*100)%>%
+突变(C.Percent=累积(百分比))
+返回(表)
+ }
现在给出:

> freqTable(data, "factors")
# A tibble: 2 × 4
  factors     N Percent C.Percent
    <int> <int>   <dbl>     <dbl>
1       2     2      40        40
2       3     3      60       100
频率表(数据,“系数”) #一个tibble:2×4 系数N%C.百分比 1 2 2 40 40 2 3 3 60 100
查看“使用dplyr vignette编程”:您是如何发现它可以与
粘贴一起使用的?使用
as.character
时,我从错误消息中怀疑它正在将变量名计算为值,并认为如果使用“粘贴”,它可能会将值输出到我需要的空间中。这是一个很酷的技巧,我想知道它是否适用于其他函数,如aggregate,也使用静态名称作为输入。我正在准备一个答案,在那之前,在那之后,我重新命名了这个专栏。。。如果有人能解释发生了什么我会很高兴的!实际上,它似乎都来自于你从一个组到另一个组,这里不需要粘贴,从我对非标准评估所做的少量阅读来看,大多数函数似乎都有一个非标准(NSE)和标准评估(SE)版本。正常(不带下划线)函数名为NSE版本,下划线版本为标准评估版本。据我所知,NSE采用变量名,而SE版本采用值。
# A tibble: 1 × 4
  `paste(field)`     N Percent C.Percent
           <chr> <int>   <dbl>     <dbl>
1        factors     5     100       100
freqTable <- function(x, field){
+      Table <- x %>%
+             group_by_(paste(field)) %>%
+             summarise(N = n(), Percent = n()/NROW(x)*100) %>%
+             mutate(C.Percent = cumsum(Percent))
+   return(Table)
+ }
> freqTable(data, "factors")
# A tibble: 2 × 4
  factors     N Percent C.Percent
    <int> <int>   <dbl>     <dbl>
1       2     2      40        40
2       3     3      60       100