ls(pattern="") 的意外行为
Unexpected behavior of ls(pattern="")
因为我想将几个数据帧绑定在一起以检索一个大帧,所以我使用 mget(ls(pattern="")) 按模式绑定行。这通常效果很好,但以下示例除外:
library(dplyr)
`Accuracy 1` <- data.frame (Product = "10001",
Bias = 0.4,
Variance = 0.1,
Disturbance = 0.5)
`Accuracy 2` <- data.frame (Product = "20001",
Bias = 0.1,
Variance = 0.1,
Disturbance = 0.8)
`Accuracy_3` <- data.frame (Product = "30001",
x = "test",
y = 0.1,
z = 0.2,
w = "why")
acc_output <- mget(ls(pattern="Accuracy *")) %>%
bind_rows()
如您所见,其中一个数据框 (Accuracy_3) 显示了不同的名称模式。我希望当我在准确度一词后用 space 定义模式时,该帧将被忽略,只有前两个帧会绑定在一起,
然而,这不是这里发生的事情。即使我用 space 定义模式,绑定也会为带有下划线的模式完成。为什么会发生这种情况,我该如何避免这种情况?
ls
中的模式是 正则表达式 (参见 https://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html)。
在您的模式 Accuracy *
中,*
被解释为前一个字符 零次或多次 次出现,即 space .由于 Accuracy_
有零个 space,它匹配模式。
您可以改为使用 Accuracy
或 Accuracy [1-2]
。
因为我想将几个数据帧绑定在一起以检索一个大帧,所以我使用 mget(ls(pattern="")) 按模式绑定行。这通常效果很好,但以下示例除外:
library(dplyr)
`Accuracy 1` <- data.frame (Product = "10001",
Bias = 0.4,
Variance = 0.1,
Disturbance = 0.5)
`Accuracy 2` <- data.frame (Product = "20001",
Bias = 0.1,
Variance = 0.1,
Disturbance = 0.8)
`Accuracy_3` <- data.frame (Product = "30001",
x = "test",
y = 0.1,
z = 0.2,
w = "why")
acc_output <- mget(ls(pattern="Accuracy *")) %>%
bind_rows()
如您所见,其中一个数据框 (Accuracy_3) 显示了不同的名称模式。我希望当我在准确度一词后用 space 定义模式时,该帧将被忽略,只有前两个帧会绑定在一起,
然而,这不是这里发生的事情。即使我用 space 定义模式,绑定也会为带有下划线的模式完成。为什么会发生这种情况,我该如何避免这种情况?
ls
中的模式是 正则表达式 (参见 https://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html)。
在您的模式 Accuracy *
中,*
被解释为前一个字符 零次或多次 次出现,即 space .由于 Accuracy_
有零个 space,它匹配模式。
您可以改为使用 Accuracy
或 Accuracy [1-2]
。