我需要編寫一個函數,數據幀列作爲參數變量,如果其中任何一個丟失了,比如從創建僅在功能參數丟失
foo bar
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
10 10 10
打算將增加新的變量數據框到:
foo bar arg3
1 1 1 NA
2 2 2 NA
3 3 3 NA
4 4 4 NA
5 5 5 NA
6 6 6 NA
7 7 7 NA
8 8 8 NA
9 9 9 NA
10 10 10 NA
。到目前爲止,我有這樣的例子:
df <- data.frame(foo = 1:10, bar = 1:10)
CheckData <- function(data, arg1 = NULL, arg2 = NULL, arg3 = NULL) {
list_args <- list(arg1, arg2, arg3)
# lapply(list_args, function(x) if(is.null(x)) data[[x]] <<- NA)
# lapply(list_args, function(x) if(is.null(x)) data$x <<- NA)
return(data)
}
CheckData(df, arg1 = 'foo', arg2 = 'bar')
所以,我傳遞給函數2列,富&酒吧,這使得ARG3是NULL
,默認值一個數據幀。在2條註釋掉線,我們有兩個選擇 -
- 第一理想地看到,由於
arg3
在list_args
是NULL
,一個新的變量data[[arg3]]
應建立&與NA
小號填充。然而,這不起作用,我想知道是否有些非標準評估可以在這裏幫助,以便它不把它看作是NULL
對象,而是作爲名稱/字符串。 - 第二個以這種方式工作,但創建了一個名爲
df$x
的變量,而不是df$arg3
。
我可以明確地做這一個接一個,如
CheckData <- function(data, arg1 = NULL, arg2 = NULL, arg3 = NULL) {
if(is.null(arg1)) data$arg1 <- NA
if(is.null(arg2)) data$arg2 <- NA
if(is.null(arg3)) data$arg3 <- NA
return(data)
}
CheckData(df, arg1 = 'foo', arg2 = 'bar')
但這將是不雅,並要求所有可能的變量,這是不是我的需要現實的先驗知識。
這看起來對於高級R程序員來說應該是一個相當直接的問題,但是我被封鎖了,儘管經過了幾個小時的搜索和試驗和錯誤,仍然找不到解決方案。任何幫助
重新閱讀你的問題後,我不完全確定你想完成什麼 - 你想填寫新的列與NA或其他,給定值? –
是的,這正是我想要做的(目前爲NAs)。我想結束一個標準化的數據框,其中包含所有必需的變量/列,以便進行一些標準化分析 –