sách gpt4 ai đã đi

thay thế() bằng "[<-"?

In lại 作者:行者123 更新时间:2023-12-05 00:03:46 28 4
mua khóa gpt4 Nike

我最近偶然发现了 replace()"[<-" .它们似乎具有相似的功能,例如 "[<-"我可以做这样的事情:

        > x.tst <- array(1:6, c(2,3))
> s.tst <- array(0, c(2,3))
> s.tst
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
> s.tst[1:3] <- 1
> "[<-"(x.tst, s.tst==1, 0)
[,1] [,2] [,3]
[1,] 0 0 5
[2,] 0 4 6
> x.tst
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6

有人可以帮助澄清差异吗? replace的优势是什么?对比 "[<-"反之亦然?

1 Câu trả lời

它们基本上是完全一样的。如果您查看替换的源代码,您会看到:

function (x, list, values) 
{
x[list] <- values
x
}


因此,replace 只是 [<- 周围的一个包装器。 :
> replace(x.tst, s.tst==1, 0)
[,1] [,2] [,3]
[1,] 0 0 5
[2,] 0 4 6

sử dụng [<-如果您需要执行此操作一百万次,则可以为您提供加速,因为您会丢失对包装器函数的额外调用。但它真的很边缘,所以这是一个选择的问题。我会说 replace()更易读

顺便说一句, x.tst[s.tst==1] <- 0So sánh "[<-"(x.tst, s.tst==1, 0) 更易读.没有理由使用该构造,除非您想将结果保存在新的数据框中。

澄清一下,正如@Andrie 指出的,两者都是 replace()"[<-"(x.tst, s.tst==1, 0)您将获得整个 x.tst 的副本,并更改了相关值。所以你可以把它放在一个新对象中。这与 x.tst[s.tst==1] <- 0相反,您可以在其中更改 x.tst 本身的值。请注意,它不会节省内存,因为 R 会在进行操作之前在内部制作 x.tst 的副本。

计时结果:
> system.time(replicate(1e6, replace(x.tst, s.tst==1, 0)))
user system elapsed
12.73 0.03 12.78

> system.time(replicate(1e6, "[<-"(x.tst, s.tst==1, 0)))
user system elapsed
6.42 0.02 6.44

> system.time(replicate(1e6, x.tst[s.tst==1] <- 0))
user system elapsed
5.28 0.02 5.32

关于替换()与 "[<-"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6346101/

28 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