我正在尝试在R中设置一个函数,该函数以特定格式准备数据以输入相关图。在操作数据集时,由于其清晰度和易用性,我倾向于使用dplyr,但是在使用dplyr时,我在尝试将数据集和指定的列名称传递给此函数时遇到了问题。
这是设置,为了清楚起见,包括在这里(略微缩写形式)。我没有遇到任何错误,在发布之前我确认corrData设置正确:
library(corrplot)
library(tidyverse)
library(stringr)
table2a <- table2 %>%
mutate(example_index = str_c(country,year, sep="."))
这是实际功能:
prepCorr <- function(dtable, x2, index2) {
practice <- dtable %>%
select(index2, x2) %>%
mutate(count=1) %>%
complete(index2, x2)
practice$count[is.na(practice$count)] <- 0
practice <- spread(practice, key = x2, value = count)
M <- cor(practice)
return(M)
}
prepCorr(table2a, type, example_index)
每当我运行此功能时,我得到:
Error in overscope_eval_next(overscope, expr) : object 'example_index' not found
我也尝试利用quosures来解决这个问题,但是当我这样做时会收到不同的错误。当我运行以下修改过的代码时:
prepCorr <- function(dtable, x2, index2) {
x2 <- enquo(x2)
index2 <- enquo(index2)
practice <- dtable %>%
select(!!index2, !!x2) %>%
mutate(count=1) %>%
complete(!!index2, !!x2)
practice$count[is.na(practice$count)] <- 0
practice <- spread(practice, key = !!x2, value = count)
return(cor(practice))
}
prepCorr(table2a, type, example_index)
我明白了:
Error in !index2 : invalid argument type
我在这里做错了什么,我该如何解决这个问题?我相信我使用dplyr 0.7进行澄清。
更新:用可重复的示例替换旧示例。
答案 0 :(得分:1)
看看这个例子
library(dplyr)
myfun <- function(df, col1, col2) {
col1 <- enquo(col1) # need to quote
col2 <- enquo(col2)
df1 <- df %>%
select(!!col1, !!col2) #!! unquotes
return(df1)
}
myfun(mtcars, cyl, gear)
您可以在此处了解link关于NSE
vs SE