我只是试图打印我在R中运行的统计过程的输出,我发现paste函数似乎在反转它的输入.这里有一个MWE:

df = data.frame(p_values=c(0.01, 0.001, 0.1, 0.01))
min_index = which.min(df$p_values)
print(paste(str(min_index), 
            " with p-value ",
            str(df$p_values[min_index])))

我希望输出结果或多或少如下所示:

2 with p-value 0.001

相反,我得到的结果是,

 int 2
 num 0.001
[1] "  with p-value  "

除了出人意料的打印顺序外,我还得到了intnum[1],而且并不是所有的都在一行上.

怎么回事?我原以为paste几乎是Python concat操作符+的直接替代品,但这个结果让我挠头.

推荐答案

structure not string

R中的str()与Python str()函数不同,后者将数字转换为字符串.在R中,str()函数的存在是:

Complexible显示R对象的内部 struct ,诊断功能和替代summary(在某种程度上,dput).

这意味着当你做str(min_index)时,R告诉你min_index的 struct 是它的变量,存储一个值为2的整数.

与Pythonstr()等价的R函数将是toString(),或者可能是as.character().然而,总的来说,R对类型的容错程度要比对Python的宽容度更高.paste()和我能想到的所有其他字符串连接或打印命令将为您将数字转换为字符串,因此您只需执行以下操作:

paste(min_index, "with p-value", df$p_values[min_index])
# [1] "2  with p-value 0.001"

请注意,我删除了空格,默认情况下paste()加一个空格,但可以通过提供不同的sep参数或使用paste0()来更改.

为什么输出顺序看起来颠倒

考虑到这一点,您可能期望输出为"int 2 with p-value num 0.001".然而,它是:

 int 2
 num 0.001
[1] "  with p-value  "

这是因为str()打印输出并不返回任何内容:

x  <- str(1) # "num 1" is printed
print(x) # NULL

你的命令基本上可以解释为:

str(min_index) # int 2
str(df$p_values[min_index]) # num 0.001
paste(NULL, "with p-value", NULL) # [1] " with p-value "

这就是它按您看到的顺序打印的原因.

关于显示输出的说明

注意,正如Onyambu在 comments 中所说,如果您想显示不带[1]的输出,您可以使用cat()函数:

cat(
  min_index, "with p-value", df$p_values[min_index],
  fill = TRUE
)
# 2 with p-value 0.001

请注意,您需要fill = TRUE来正确地格式化它,包括在结尾处的一个新行.你也可以看看message().

R相关问答推荐

提取rame中对应r中某个变量的n个最小正值和n个最大负值的条目

如何从其他前面列中减go 特定列的平均值?

是否可以 Select 安装不带文档的R包以更有效地存储?

从多个前置日期中获取最长日期

ggplot geom_smooth()用于线性回归虚拟变量-没有回归线

如何使用`ggplot2::geom_segment()`或`ggspatial::geom_spatial_segment()`来处理不在格林威治中心的sf对象?

如何修复R码的置换部分?

在R中使用download. file().奇怪的URL?

如何从R ggplot图片中获取SVG字符串?

R中的哈密顿滤波

使用rvest从多个页面抓取时避免404错误

我如何go 掉盒子图底部的数字?

使用不同的定性属性定制主成分分析中点的 colored颜色 和形状

在点图上绘制置信度或预测区间ggplot2

使用shiny 中的所选要素行下拉菜单

如何将这个小列表转换为数据帧?

如何筛选截止年份之前最后一个测量年度的所有观测值以及截止年份之后所有年份的所有观测值

在GT()中的列之间添加空格

如何在R中的两列以上使用联合(&U)?

按顺序将地块添加到列表