更改列表中绘图的标题

3
我有一个绘图函数的问题。我已经问过一个类似的问题了,这里提供了所有的数据和绘图函数
当我尝试将我的绘图函数应用于我的df列表时,标题会被改变,并且我在函数中指定的标题条件不被遵守。是否有一种方法可以重命名列表中的所有绘图或修复函数/循环,以便标题保持不变?
先感谢您。

2
你还没有展示实际的*vs.*预期结果,但是乍一看,我猜测当函数在lapply或类似函数内部调用时,deparse(substitute(x))不会有任何有用的作用,因为x将具有lapply函数内变量的名称(即它将是像x而不是tbls$dummy1.no这样的东西)。那么最简单的解决方法就是向您的函数添加一个额外的参数来获取名称。然后,您可以通过Map(plot_likert, tbls, names(tbls))替换lapply(…) - Konrad Rudolph
感谢您的回复。目前,当我启动 lapply 时,我得到了 **"这些主题排名如何?- X [[i]]"**,但我想要的是 **"这些主题排名如何?- dummy: 1"**,标题的第二部分(在本例中为dummy:1)会相应地更改为绘制的df。 关于您的建议,函数中的 y 是否作为附加参数起作用?还是我需要再添加一个参数?您会添加什么补丁?提前致谢! - maplesyrup123
1
y 目前不是函数参数,而是一个本地变量!您正在使用 substitute(x) 来查找调用范围中参数 x 的名称,但调用范围在 *函数 lapply 中,正如您所看到的,lapply 使用表达式 x[[i]] 调用您的函数,因此这就是 y 获取的值。 - Konrad Rudolph
1个回答

2

这个正常运作:

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 - maplesyrup123
1
我稍后会看一下。 - gaut
或者更好的方法是,在这一系列函数中是否有一种方法可以使用if语句,以便如果我指定Likert_plot_section(section ==“Tech”),那么我就会得到对应于Tech部分的图表列表? - maplesyrup123
如果您想更清楚地了解我的目标,请查看以下链接:https://dev59.com/MngPtIcB2Jgan1znccSc - maplesyrup123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接