R 控制台输出仅显示 "if" 条件下的最新命令
R console output only shows most recent command in "if" condition
如果我在 RStudio 中 运行 这段代码:
sprintf("1 + 1 is: %d", 1+1)
sprintf("2 + 2 is: %d", 2+2)
if (1){
sprintf("1 + 1 is: %d", 1+1)
sprintf("2 + 2 is: %d", 2+2)
}
我得到这个输出:
> sprintf("1 + 1 is: %d", 1+1)
[1] "1 + 1 is: 2"
> sprintf("2 + 2 is: %d", 2+2)
[1] "2 + 2 is: 4"
>
> if (1){
+ sprintf("1 + 1 is: %d", 1+1)
+ sprintf("2 + 2 is: %d", 2+2)
+ }
[1] "2 + 2 is: 4"
我的问题是为什么 if(1) 条件中的第一个打印语句(即 1+1 行)也没有打印到控制台?似乎每当我有一个带有多行输出的“if”条件时,我想打印或绘制,只有最后一行出现。在这些情况下,如何修复它以便“if”语句中的所有代码输出都出现在控制台中?
这在 https://stat.ethz.ch/pipermail/r-help/2011-February/268969.html 上有更详细的讨论。
本质上 sprintf()
实际上并没有向终端打印任何东西,它只是调用一个函数 returns r 中的一个字符串。 (通常 R 在未分配给终端时打印返回的对象,因此是通常的行为)。在诸如此 if 语句或函数调用之类的控制块内,此行为是不同的。在这些块中,R 仅打印一个对象,即返回的对象。在 if 语句中,这是最后一个对象。
要获得您想要的行为,sprintf()
可以包含在 cat()
或 print()
语句中。
另一种方法是结合使用 print()
和 paste()
函数。
所有这些行为都已在下面的表示中进行了总结。
sprintf("1 + 1 is: %d \n", 1+1)
#> [1] "1 + 1 is: 2 \n"
sprintf("2 + 2 is: %d", 2+2)
#> [1] "2 + 2 is: 4"
if (1){
sprintf("1 + 1 is: %d \n", 1+1)
sprintf("2 + 2 is: %d", 2+2)
}
#> [1] "2 + 2 is: 4"
if (1){
cat(sprintf("1 + 1 is: %d \n", 1+1))
print(sprintf("2 + 2 is: %d", 2+2))
sprintf("2 + 2 is: %d", 3+3)
}
#> 1 + 1 is: 2
#> [1] "2 + 2 is: 4"
#> [1] "2 + 2 is: 6"
if(1) {
print(paste("1 + 1 is:", 1 + 1))
print(paste("2 + 2 is:", 2 + 2))
}
#> [1] "1 + 1 is: 2"
#> [1] "2 + 2 is: 4"
由 reprex package (v2.0.0)
于 2021-04-06 创建
如果我在 RStudio 中 运行 这段代码:
sprintf("1 + 1 is: %d", 1+1)
sprintf("2 + 2 is: %d", 2+2)
if (1){
sprintf("1 + 1 is: %d", 1+1)
sprintf("2 + 2 is: %d", 2+2)
}
我得到这个输出:
> sprintf("1 + 1 is: %d", 1+1)
[1] "1 + 1 is: 2"
> sprintf("2 + 2 is: %d", 2+2)
[1] "2 + 2 is: 4"
>
> if (1){
+ sprintf("1 + 1 is: %d", 1+1)
+ sprintf("2 + 2 is: %d", 2+2)
+ }
[1] "2 + 2 is: 4"
我的问题是为什么 if(1) 条件中的第一个打印语句(即 1+1 行)也没有打印到控制台?似乎每当我有一个带有多行输出的“if”条件时,我想打印或绘制,只有最后一行出现。在这些情况下,如何修复它以便“if”语句中的所有代码输出都出现在控制台中?
这在 https://stat.ethz.ch/pipermail/r-help/2011-February/268969.html 上有更详细的讨论。
本质上 sprintf()
实际上并没有向终端打印任何东西,它只是调用一个函数 returns r 中的一个字符串。 (通常 R 在未分配给终端时打印返回的对象,因此是通常的行为)。在诸如此 if 语句或函数调用之类的控制块内,此行为是不同的。在这些块中,R 仅打印一个对象,即返回的对象。在 if 语句中,这是最后一个对象。
要获得您想要的行为,sprintf()
可以包含在 cat()
或 print()
语句中。
另一种方法是结合使用 print()
和 paste()
函数。
所有这些行为都已在下面的表示中进行了总结。
sprintf("1 + 1 is: %d \n", 1+1)
#> [1] "1 + 1 is: 2 \n"
sprintf("2 + 2 is: %d", 2+2)
#> [1] "2 + 2 is: 4"
if (1){
sprintf("1 + 1 is: %d \n", 1+1)
sprintf("2 + 2 is: %d", 2+2)
}
#> [1] "2 + 2 is: 4"
if (1){
cat(sprintf("1 + 1 is: %d \n", 1+1))
print(sprintf("2 + 2 is: %d", 2+2))
sprintf("2 + 2 is: %d", 3+3)
}
#> 1 + 1 is: 2
#> [1] "2 + 2 is: 4"
#> [1] "2 + 2 is: 6"
if(1) {
print(paste("1 + 1 is:", 1 + 1))
print(paste("2 + 2 is:", 2 + 2))
}
#> [1] "1 + 1 is: 2"
#> [1] "2 + 2 is: 4"
由 reprex package (v2.0.0)
于 2021-04-06 创建