1
我工作在一個需要參數funs
是的功能的串被施加到一組變量vars
的功能。最簡單的做法似乎是使用dplyr的summarize_at
和SE版本的funs
函數。傳遞一個字符向量作爲玩意兒論據summarize_at
這適用於那些內置R中,但似乎並沒有與用戶定義函數的工作職能。它報告一個錯誤,它找不到用戶定義的函數。但是,「手動」完成後,summarize_at
會起作用。
此功能是產生箱用於閃亮儀表板的較大功能的一部分。我寧願不要爲每種類型的盒子(每個函數和函數參數組合)都有(並且必須維護)不同的Shiny模塊。
一個最小的可重複的例子是以下:
# function to compute summary stat
compute_box_value <- function(data, vars, funs) {
f = funs_(funs)
result <- data %>%
summarize_at(.cols = vars, .funs = f)
}
# simple user defined function that gets count of rows with certain values of x
equals <- function(x, test_value) {
sum(x %in% test_value)
}
x <- data.frame(value = sample(1:5, 10, TRUE))
vars <- c("value")
# this works
print(compute_box_value(x, vars, "mean(., na.rm = TRUE)"))
# this works
summarize_at(x, vars, .funs = "equals", test_value = 1)
# this doesn't work (error: couldn't find function equals)
print(compute_box_value(x, vars, "equals(., test_value = 1)"))
已經到了一半。該公式適用,但不適用於字符串。我發現在eval(parse())裏面嵌套字符串得到了剩餘的部分。標記爲答案。 – iacobus
我應該添加該字符串是必需的,因爲它在我的實際代碼中嵌套在一個更大的函數中。我不直接調用'compute_box_value()',因此不能直接輸入參數作爲非字符串參數。 – iacobus
@iacobus很高興幫助!隨意添加任何未涵蓋的附加信息,並可能使未來的讀者受益。您也可以將這些精度添加到您的問題。 –