我有一个类似的文本文件:
"你好,
我有%d只狗和%d只猫,
平均分别为%f和%f千克......"
我正在尝试创建一个R函数,它将矢量作为输入
(例如c(2, 3, 3.4, 2.3)
)并使用其条目填充%f和%d
在文本文件中(按正确的顺序)。
这应该是非常简单的,但我找不到合适的方法 做到这一点。谢谢!
答案 0 :(得分:3)
正如@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))
答案 1 :(得分:3)
如果您可以使用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。
您也可以在模板中执行循环。没有像sprintf
那样的8192字符限制。