就像在 SAS 中我可以做的那样
put @5 value1
@12 "="
@24 estimate1
;
我可以在 R 中使用“cat”之类的函数来打印定位值和对象吗?
如果我的问题对你来说很清楚,请告诉我。
提前致谢!
这是一个猜测。这将创建一个长的空字符串,然后通过 substr 将值放入其中:
fixput <- function(...,nchar=80){
s=paste0(rep(" ",nchar),collapse="")
args=list(...)
for(arg in seq(1,length(args),by=2)){
substr(s,args[arg],nchar)=as.character(args[arg+1])
}
s
}
用法:
> value1=1.234
> estimate1=pi
> fixput(5, value1, 12, "=", 24, estimate1)
[1] " 1.234 = 3.14159265358979 "
请注意,它返回一个字符串,因此如果您希望它在脚本中输出,您可以直接cat
使用它。还要注意如果插值很长会发生什么:
> value1=pi
> fixput(5, value1, 12, "=", 24, estimate1)
[1] " 3.14159=65358979 3.14159265358979 "
sprintf()
是你的朋友 - 从帮助页面引用
C 函数 sprintf 的包装器,它返回包含文本和变量值的格式化组合的字符向量。
请参阅帮助页面中的示例?sprintf
,例如
sprintf("min 10-char string '%10s'", c("a", "ABC", "and an even longer one"))
将产生:
[1] "min 10-char string ' a'"
[2] "min 10-char string ' ABC'"
[3] "min 10-char string 'and an even longer one'"
虽然以下处理实数
n <- 1:8
sprintf(paste0("e with %2d digits = %.", n, "g"), n, exp(1))
产生:
[1] "e with 1 digits = 3"
[2] "e with 2 digits = 2.7"
[3] "e with 3 digits = 2.72"
[4] "e with 4 digits = 2.718"
[5] "e with 5 digits = 2.7183"
[6] "e with 6 digits = 2.71828"
[7] "e with 7 digits = 2.718282"
[8] "e with 8 digits = 2.7182818"