如何 return 函数中的参数名称作为列值?
How do I return the name of an argument in my function as a column value?
我正在从数值向量和开始日期向量生成参考 table。我希望我的引用 table 中的其中一列等于我的第一个参数的名称(它应该为每一行读取 "Ekonom" )。这很重要,因为我会将几个 table 连接在一起,因为我需要区分我的观察结果。
我的输入:
Ekonom<-c(15,15,15,15,7.5,7.5,15,7.5,7.5,15,15,15,30,0)
sdEkonom<-structure(c(15586, 15950, 16314, 16678, 17042, 17406, 17777,
18141), class = "Date")
我的程序如下:
reference_table<-function(x,y){
summer_break<-ifelse(cumsum(x)<=60, 0, ifelse(cumsum(x)>60 & cumsum(x)<=120 , 1,2))
program<-cbind(x,summer_break)
program<-as.data.frame(program)
program<-program%>%rename(points=x)
program<-program%>%mutate(program=as.character(rlang::enexpr(x)))
program<-program%>%mutate(weeks_course=points/1.5)
program<-program%>%mutate(points_expected=lag(cumsum(points)))
program<-program%>%mutate(points_expected=ifelse(is.na(points_expected),0,points_expected))
program<-program%>%mutate(order=1:n())
program<-crossing(y, program)
program<-program%>%arrange(y, order)
program<-program%>%mutate(starttermin=ifelse(order==1,1,0))
program$kull<-cumsum(program$starttermin)
program<-program%>%mutate(start_date=y-1)
program<-program%>%group_by(kull)%>%mutate(start_date_points=start_date+lag(cumsum(weeks_course)*7+3*7+summer_break*12*7))
program<-program%>%group_by(kull)%>%mutate(end_date_points=start_date+cumsum(weeks_course)*7+3*7+summer_break*12*7-1)
program<-program%>%mutate(start_date_points=if_else(is.na(start_date_points),start_date,as.Date(start_date_points)))
program<-program%>%group_by(start_date)%>%mutate(finished_date=max(start_date_points))
program<-program%>%mutate(finished=ifelse(lead(kull, default=0)==kull,0,1))
}
特别重要的是这一行:
program<-program%>%mutate(program=as.character(rlang::enexpr(x)))
我通过写来执行程序:
ekon_program<-reference_table(Ekonom, sdEkonom)
出于某种原因,该函数在我的程序列中未将 x 计算为 "Ekonom",而是计算为“15”。为什么会发生这种情况以及如何获得正确的输出?
尽早定义变量,稍后在函数中使用它
library(dplyr)
reference_table<-function(x,y){
col_values <- as.character(rlang::enexpr(x))
summer_break<- ifelse(cumsum(x)<=60, 0,
ifelse(cumsum(x) > 60 & cumsum(x)<=120 , 1,2))
program<- data.frame(x,summer_break)
program %>%
rename(points=x) %>%
mutate(program = col_values)
}
reference_table(Ekonom, sdEkonom)
# points summer_break program
#1 15.0 0 Ekonom
#2 15.0 0 Ekonom
#3 15.0 0 Ekonom
#4 15.0 0 Ekonom
#5 7.5 1 Ekonom
#6 7.5 1 Ekonom
#7 15.0 1 Ekonom
#8 7.5 1 Ekonom
#9 7.5 1 Ekonom
#10 15.0 1 Ekonom
#11 15.0 2 Ekonom
#12 15.0 2 Ekonom
#13 30.0 2 Ekonom
#14 0.0 2 Ekonom
这种情况下,你也可以使用
col_values <- deparse(substitute(x))
我正在从数值向量和开始日期向量生成参考 table。我希望我的引用 table 中的其中一列等于我的第一个参数的名称(它应该为每一行读取 "Ekonom" )。这很重要,因为我会将几个 table 连接在一起,因为我需要区分我的观察结果。
我的输入:
Ekonom<-c(15,15,15,15,7.5,7.5,15,7.5,7.5,15,15,15,30,0)
sdEkonom<-structure(c(15586, 15950, 16314, 16678, 17042, 17406, 17777,
18141), class = "Date")
我的程序如下:
reference_table<-function(x,y){
summer_break<-ifelse(cumsum(x)<=60, 0, ifelse(cumsum(x)>60 & cumsum(x)<=120 , 1,2))
program<-cbind(x,summer_break)
program<-as.data.frame(program)
program<-program%>%rename(points=x)
program<-program%>%mutate(program=as.character(rlang::enexpr(x)))
program<-program%>%mutate(weeks_course=points/1.5)
program<-program%>%mutate(points_expected=lag(cumsum(points)))
program<-program%>%mutate(points_expected=ifelse(is.na(points_expected),0,points_expected))
program<-program%>%mutate(order=1:n())
program<-crossing(y, program)
program<-program%>%arrange(y, order)
program<-program%>%mutate(starttermin=ifelse(order==1,1,0))
program$kull<-cumsum(program$starttermin)
program<-program%>%mutate(start_date=y-1)
program<-program%>%group_by(kull)%>%mutate(start_date_points=start_date+lag(cumsum(weeks_course)*7+3*7+summer_break*12*7))
program<-program%>%group_by(kull)%>%mutate(end_date_points=start_date+cumsum(weeks_course)*7+3*7+summer_break*12*7-1)
program<-program%>%mutate(start_date_points=if_else(is.na(start_date_points),start_date,as.Date(start_date_points)))
program<-program%>%group_by(start_date)%>%mutate(finished_date=max(start_date_points))
program<-program%>%mutate(finished=ifelse(lead(kull, default=0)==kull,0,1))
}
特别重要的是这一行:
program<-program%>%mutate(program=as.character(rlang::enexpr(x)))
我通过写来执行程序:
ekon_program<-reference_table(Ekonom, sdEkonom)
出于某种原因,该函数在我的程序列中未将 x 计算为 "Ekonom",而是计算为“15”。为什么会发生这种情况以及如何获得正确的输出?
尽早定义变量,稍后在函数中使用它
library(dplyr)
reference_table<-function(x,y){
col_values <- as.character(rlang::enexpr(x))
summer_break<- ifelse(cumsum(x)<=60, 0,
ifelse(cumsum(x) > 60 & cumsum(x)<=120 , 1,2))
program<- data.frame(x,summer_break)
program %>%
rename(points=x) %>%
mutate(program = col_values)
}
reference_table(Ekonom, sdEkonom)
# points summer_break program
#1 15.0 0 Ekonom
#2 15.0 0 Ekonom
#3 15.0 0 Ekonom
#4 15.0 0 Ekonom
#5 7.5 1 Ekonom
#6 7.5 1 Ekonom
#7 15.0 1 Ekonom
#8 7.5 1 Ekonom
#9 7.5 1 Ekonom
#10 15.0 1 Ekonom
#11 15.0 2 Ekonom
#12 15.0 2 Ekonom
#13 30.0 2 Ekonom
#14 0.0 2 Ekonom
这种情况下,你也可以使用
col_values <- deparse(substitute(x))