sách gpt4 ai đã đi

R pipe (%>%) không hoạt động với hàm sao chép

In lại 作者:行者123 更新时间:2023-12-03 20:27:04 31 4
mua khóa gpt4 Nike

我正在尝试学习管道功能(%>%)。
当试图从这行代码转换到另一行时,它不起作用。

---- R代码--原版-----

set.seed(1014)
replicate(6,sample(1:8))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 3 7 4 5 1
[2,] 2 8 4 2 4 2
[3,] 5 4 8 5 8 5
[4,] 3 1 2 1 1 7
[5,] 4 6 3 7 7 3
[6,] 6 5 1 3 3 8
[7,] 8 7 5 8 6 6
[8,] 7 2 6 6 2 4

---- R 代码 - 用管道重新编码 ----
> sample(1:8) %>% replicate(6,.)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 7 7 7 7 7 7
[2,] 3 3 3 3 3 3
[3,] 2 2 2 2 2 2
[4,] 1 1 1 1 1 1
[5,] 5 5 5 5 5 5
[6,] 4 4 4 4 4 4
[7,] 8 8 8 8 8 8
[8,] 6 6 6 6 6 6

请注意,使用管道时,采样不起作用给我
相同的向量。

1 Câu trả lời

这是可以预料的。 replicate 需要一个表达式,但是当您按原样使用管道运算符时,您只需将调用的结果粘贴到 sample() đến replicate 。所以你得到 6 倍相同的结果。

您必须使用 quote() 来传递要复制的表达式而不是结果,但您不应该忘记评估该表达式的每个重复。

quote(sample(c(1:10,-99),6,rep=TRUE)) %>% 
replicate(6, .) %>%
sapply(eval)

给出:
    [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 5 2 10 10 9 2
[2,] 4 3 1 3 -99 1
[3,] 10 2 3 8 2 4
[4,] -99 1 6 2 10 3
[5,] 8 -99 1 9 4 6
[6,] 4 10 8 1 -99 8

这里会发生什么:
  • 管道发送和表达式复制而不评估它。
  • 复制复制该表达式并返回一个包含该表达式 6 倍的列表,但不对其进行评估。
  • sapply(eval) 遍历列表并执行该列表中的每个表达式。

  • 在您之前的问题中(即使用 data.frame 时),您可以这样做:
    quote(sample(c(1:10,-99),6,rep=TRUE)) %>% 
    replicate(6, .) %>%
    dữ liệu.khung

    现在函数 dữ liệu.khung 将强制执行表达式,但你也会得到可怕的变量名,即表达式本身。

    如果您想在此处了解有关这些问题的更多信息,则必须深入研究所谓的“惰性评估”以及管道运算符(operator)如何准确处理它。但老实说,在这种情况下,我真的看不出使用管道运算符有什么好处。它甚至更具可读性。

    根据弗兰克的评论:您可以混合使用管道和函数嵌套来避免 sapply 。但为此,您必须在代码块中包含嵌套函数,否则管道运算符将无法正确处理它:
    quote(sample(c(1:10,-99),6,rep=TRUE)) %>% {
    replicate(6, eval(.)) }

    非常有趣,但恕我直言不是很有用......

    关于R 管道 (%>%) 不适用于复制功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43282796/

    31 4 0
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com