r - 字符类变量在R中的对话框中打印多行
问题描述
在 R 中,我希望用户通过对话框(即svDialogs'
dlgInput
)提供信息。但是,为了避免用户提供双重数据,我想在提到的对话框中列出已经存在的信息。问题是,如果变量有多个数据,则会出现多行(与数据一样多)。
例如,使用以下代码:
library(svDialogs)
temp = c("one", "two", "three")
userInput <- dlgInput(paste("Enter info (these already exist:", temp, ")"))$res
给我一个对话框,在用户输入字段上方有以下几行:
Enter info (these already exist: one)
Enter info (these already exist: two)
Enter info (these already exist: three)
鉴于,我想要的是:
Enter info (these already exist: one, two, three)
我尝试了以下 2 种替代方法,两者都给出了相同的结果paste()
:
sprintf("Enter a ticker (these are already loaded: %s)", temp)
stringr::str_glue("Hi Have a very nice ${temp} !")
以下替代方案几乎奏效了,但它们给了我一个奇怪"Hi Have a very nice c(\"one\", \"two\", \"three\") !"
的感觉,我不知道如何c(\)
去掉引号和引号:
fn$paste("Enter a ticker (these are already loaded: $temp)") #requires library(gsubfn)
stringr::str_interp("Hi Have a very nice ${temp} !")
str_interp("Hi Have a very nice ${temp} !")
我的问题:
- 我必须如何编辑
dlgInput(paste("Enter info (these already exist:", temp, ")"))$res
才能使输出呈现Enter info (these already exist: one, two, three)
?
使用的系统:
- R 版本:4.1.1 (2021-08-10)
- RStudio 版本:1.4.1717
- 操作系统:macOS Catalina 版本 10.15.7
解决方案
所有这些函数都是矢量化的,因此它们每个输入产生一个输出。您希望在将输入传递给任何这些函数之前折叠输入。这可以通过例如:toString
userInput <- dlgInput(paste("Enter info (these already exist:", toString(temp), ")"))$res
您也可以使用paste(temp, collapse = ', ')
来获得相同的结果。请注意,您仍然需要两个(嵌套)调用paste
,这里单个调用是不够的。
使用“胶水”时,您可以通过glue_collapse
或通过实施和使用折叠变压器来实现相同的效果。
推荐阅读
- networking - 外部 ips 应该如何在 OpenShift (4.x) 中工作?
- amazon-web-services - 在同一区域内使用预签名 URL 将文件从 S3 下载到 EC2 的成本
- android - 将缩略图设置为“VideoView”的 Android 代码
- javascript - JavaScript 中的调用堆栈优先级
- javascript - Vuex中未定义的ReferenceError
- c# - 尝试获取模板绑定样式以更新背景颜色
- javascript - 如何让机器人对媒体消息(png、mp4 等)做出反应?
- cpu-architecture - 具有两个以上分支目标的指令的 CPU
- spring - 使用 DirtiesContext 注释重新加载 Spring 应用程序不适用于嵌套类
- ios - 如何知道在 detailCalloutAccessoryView 中按下了哪个按钮