簡體   English   中英

如何將函數中的參數名稱作為列值返回?

[英]How do I return the name of an argument in my function as a column value?

我正在從一個數字向量和一個開始日期向量生成一個參考表。 我希望我的參考表中的一列等於我的第一個參數的名稱(它應該為每一行讀取“Ekonom”)。 這很重要,因為我將把幾個表連接在一起,因為我需要區分我的觀察結果。

我的輸入:

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM