我有一个名为 data 的数据表:
[![这是数据表的屏幕截图][1]][1]
目标是编写一个模仿以下代码的函数:
data[Region == "Northeast",mean(Awareness, na.rm = TRUE), by = Product][order(-rank(V1))][1:5,.(Product)]
到目前为止我已经:
topx_engagement = function(state_of_engagement, respondent_variable, respondent_variable_sub, rank_length = 3){
respondent_variable_sub = as.character(respondent_variable_sub)
data[eval(respondent_variable == respondent_variable_sub), mean(get(state_of_engagement), na.rm = TRUE), by = Product][order(-rank(V1))][1:rank_length,.(Product)]
}
函数 topx_engagement 应允许用户输入与 Region 一致的 respondent_variable,与 “Northeast” 一致的 respondent_variable_sub 以及后续参数。我想重点关注前面的论点,因为所有其他论点都工作得很好。
目前,当我打电话时:
topx_engagement(state_of_engagement = Awareness, respondent_variable = Region, respondent_variable_sub = Northeast, rank_length = 3)
我收到错误:
topx_engagement 中的错误(state_of_engagement = 意识,respondent_variable = 区域,: 找不到对象“东北”
或者,跑步
topx_engagement = function(state_of_engagement, respondent_variable, respondent_variable_sub, rank_length = 3){
#respondent_variable_sub = as.character(respondent_variable_sub)
data[eval(respondent_variable == respondent_variable_sub), mean(get(state_of_engagement), na.rm = TRUE), by = Product][order(-rank(V1))][1:rank_length,.(Product)]
}
topx_engagement(state_of_engagement = Awareness, respondent_variable = Region, respondent_variable_sub = Northeast, rank_length = 3)
抛出错误 eval(.massagei(isub[[2L]]),parent.frame(),parent.frame()) 中的错误:找不到对象“Region”
我需要帮助以正确的格式获取函数输入。 [1]:https://i.sstatic.net/hseWS.png
如果我们传递不带引号的参数,我们可以使用
deparse/substitute
转换为 character
字符串
topx_engagement = function(state_of_engagement,
respondent_variable, respondent_variable_sub, rank_length = 3){
state_of_engagement <- deparse(substitute(state_of_engagement))
respondent_variable <- deparse(substitute(respondent_variable))
respondent_variable_sub <- deparse(substitute(respondent_variable_sub))
data[eval(as.name(respondent_variable)) == respondent_variable_sub,
mean(get(state_of_engagement), na.rm = TRUE),
by = Product][order(-rank(V1))][1:rank_length,.(Product)]
}
然后称其为
topx_engagement(state_of_engagement = Awareness,
respondent_variable = Region,
respondent_variable_sub = Northeast, rank_length = 3)