我有一个这样的文本文件:
“你好,
我有 %d 只狗和 %d 只猫,
其中平均重量分别为 %f 和 %f 公斤..."
我正在尝试创建一个 R 函数,该函数将向量(例如c(2, 3, 3.4, 2.3)
)作为输入,并使用其条目来填充文本文件中的 %f 和 %d (以正确的顺序)。
这应该很简单,但我找不到合适的方法。谢谢!
正如@MatthewPlourde 指出的那样,该sprintf
功能在这里应该很有用。
a<-"Hello,
I have %d dogs and %d cats,
which on average weight respectively %f and %f kilograms... "
sprintf(a, 2, 3, 3.4, 2.3)
这确实需要将您的向量“解包”为参数。如果你确实有向量中的值,你可以这样做
v<-c(2, 3, 3.4, 2.3)
do.call(sprintf, c(list(a), v))
如果您可以使用brew
包语法编写模板,则可以执行以下操作:
I have <%= ndogs %> dogs and <%= ncats %> cats which on
average weight <%= dogweight/ndogs %> and <%= catweight/ncats %> kg
respectively
然后安装brew
,然后执行:
require(brew)
dogweight=23
catweight=12
ncats=4
ndogs=2
brew("animals.txt")
产生:
I have 2 dogs and 4 cats which on
average weight 11.5 and 3 kg
respectively
您可以将其发送到另一个文件或将其作为文本捕获到 R 中。
您还可以在模板中执行循环。没有 8192 个字符限制,例如sprintf
.