簡體   English   中英

將列名作為參數傳遞給函數

[英]Pass column names as argument into a function

我創建了一個數據表df

library(data.table)
df <- data.table(id = c(1,1,1,2,2), starts = c(0,0,6,0,9), ends = c(0,6,10,9,20))

df
   #id starts ends
#1:  1      0    0
#2:  1      0    6
#3:  1      6   10
#4:  2      0    9
#5:  2      9   20

我定義了一個函數“equal_0”,它輸入一個col_name ,然后該函數將返回一個帶有col_name == 0的數據表

equal_0 <- function(col_name){
    a <- df[col_name == 0]
    return(a)
}

例如, equal_0(starts)等於df[starts == 0] ,預期結果是:

df[starts==0]
   #id starts ends
#1:  1      0    0
#2:  1      0    6
#3:  2      0    9

但是, equal_0(starts)equal_0("starts")都不起作用。

錯誤信息是:

equal_0("starts")
#Empty data.table (0 rows) of 3 cols: id,starts,ends

equal_0(starts)
#Error in eval(.massagei(isub), x, parent.frame()) : object 'starts' not found 

如何將starts傳遞到函數equal_0

使用get從 data.table 中提取列:

equal_0 <- function(col_name){
    library(data.table)
    a <- df[get(col_name) == 0]
    return(a)
}
equal_0("starts")
   id starts ends
1:  1      0    0
2:  1      0    6
3:  2      0    9

暫無
暫無

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

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