0

就像在 SAS 中我可以做的那样

put @5 value1
    @12 "="
    @24 estimate1
;

我可以在 R 中使用“cat”之类的函数来打印定位值和对象吗?

如果我的问题对你来说很清楚,请告诉我。

提前致谢!

4

2 回答 2

6

这是一个猜测。这将创建一个长的空字符串,然后通过 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                                         "
于 2013-06-22T08:28:21.133 回答
3

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"          
于 2013-06-22T08:53:38.103 回答