【发布时间】:2018-04-13 20:14:32
【问题描述】:
在 R 中,我使用dplyr,更具体地说是arrange()。
不知何故,arrange 函数无法按预期工作。
在下面的示例中,我首先存储列的名称,然后将此变量作为参数传递给名为“my_function”的自定义函数。
target_column = 'mean_age'
# below the function
my_function <- function(target_column, number){
df <- read.csv('file.csv', stringsAsFactors=FALSE)
df <- df[, c(1,4,10)]
names(df) <- c('place','state','mean_age')
df1 <- df %>% group_by(state) %>% arrange(target_column)
df1 %>% summarise(rank = nth(target_column, number))
}
由于arrange()的输入而调用'my_function'时R返回错误:
“arrange_impl(.data, dots) 中的错误: 位置 1 的尺寸 (1) 不正确,预期为:4000"
当列名直接放入arrange(),而不是引用字符串的变量(如上例)时,它确实接受参数。
df %>% group_by(state) %>% arrange(mean_age)
如何以更好的方式将列名的参数传递给“my_function”,以便arrange() 能够识别它?
【问题讨论】:
-
在一个简单的情况下,您在函数中使用
arrange并希望将变量作为字符串传递,您可以使用arrange_at代替arrange。你的情况对我来说看起来更复杂,nth和summarise,所以使用 unquoting/quosures 进行编程可能更有意义。