我有一个绘图函数的问题。我已经问过一个类似的问题了,这里提供了所有的数据和绘图函数。
当我尝试将我的绘图函数应用于我的df列表时,标题会被改变,并且我在函数中指定的标题条件不被遵守。是否有一种方法可以重命名列表中的所有绘图或修复函数/循环,以便标题保持不变?
先感谢您。
当我尝试将我的绘图函数应用于我的df列表时,标题会被改变,并且我在函数中指定的标题条件不被遵守。是否有一种方法可以重命名列表中的所有绘图或修复函数/循环,以便标题保持不变?
先感谢您。
这个正常运作:
mynames <- sapply(names(tbls), function(x) {
paste("How do they rank? -",gsub("\\.",": ",x))
})
myfilenames <- names(tbls)
plot_likert <- function(x, myname, myfilename){
p <- plot(likert(x),
type ="bar",center=3,
group.order=names(x))+
labs(x = "Theme", subtitle=paste("Number of observations:",nrow(x)))+
guides(fill=guide_legend("Rank"))+
ggtitle(myname)
p
}
list_plots <- lapply(1:length(tbls),function(i) {
plot_likert(tbls[[i]], mynames[i], myfilenames[i])
})
当你不确定时,保持事情简单易懂。非标准评估技术如deparse(substitute(
会让你陷入Burns的R地狱。
mynames
代码,使每个图形都有一个完全自动化的标题,如下所示:mynames <- sapply(names(tbls), function(x) { paste("How do", section,"rank? -",gsub("\\.",": ",x)) })
其中section
是一个字符串列表,例如section<-c("Tech","Social","Law")
。在我的真实数据中,dfs的名称与此字符串的一部分匹配,因此是否可能使每个绘图标题与其部分匹配而不使用deparse
?因此,如果使用的df的名称为“Technology”,则生成的标题为How does Technology rank? - dummy2: low。 - maplesyrup123if
语句,以便如果我指定Likert_plot_section(section ==“Tech”)
,那么我就会得到对应于Tech部分的图表列表? - maplesyrup123
lapply
或类似函数内部调用时,deparse(substitute(x))
不会有任何有用的作用,因为x
将具有lapply
函数内变量的名称(即它将是像x
而不是tbls$dummy1.no
这样的东西)。那么最简单的解决方法就是向您的函数添加一个额外的参数来获取名称。然后,您可以通过Map(plot_likert, tbls, names(tbls))
替换lapply(…)
。 - Konrad Rudolphlapply
时,我得到了 **"这些主题排名如何?- X [[i]]"**,但我想要的是 **"这些主题排名如何?- dummy: 1"**,标题的第二部分(在本例中为dummy:1)会相应地更改为绘制的df。 关于您的建议,函数中的y
是否作为附加参数起作用?还是我需要再添加一个参数?您会添加什么补丁?提前致谢! - maplesyrup123y
目前不是函数参数,而是一个本地变量!您正在使用substitute(x)
来查找调用范围中参数x
的名称,但调用范围在 *函数lapply
中,正如您所看到的,lapply
使用表达式x[[i]]
调用您的函数,因此这就是y
获取的值。 - Konrad Rudolph