我見過使用定義輸入引數的()函式和使用定義輸入引數的其他函式[ ]。
例如,在這里我可以使用()以下方法定義一個函式:
my_function <- function(x1, x2, x3) {
answer = x1 x2 x3
return(answer)
}
如果我想呼叫這個函式,那么我可以這樣做:
my_function(5,1,2)
[1] 8
我也可以使用[ ]. 例如:
f_1 <- function(x) {
answer = x[[1]] x[[2]] x[[3]]
return(answer)
}
# does not work
f(5,1,2)
Error in f(5,1,2) : unused arguments (1,2)
# works:
f_1(c(5,1,2))
[1] 8
有誰知道為什么在 R 中有兩種不同的定義函式的方法?其中之一對某些任務更有利嗎?有什么區別嗎?
謝謝!
uj5u.com熱心網友回復:
括號用于原始 R 函式,如上所示。因此,(將提供“評估論證的結果”。另一方面,方括號本質上是一個索引或“運算子作用于向量、矩陣、陣列和串列以提取或替換部分”。
x1 <- c(1, 2, 3, 4)
x2 <- c(2, 4, 6, 8)
x3 <- c(3, 6, 9, 12)
因此,如果我們運行您的第一個函式,它將從每個索引位置添加每個串列中的元素。
my_function <- function(x1, x2, x3) {
answer = x1 x2 x3
return(answer)
}
my_function(x1, x2, x3)
# [1] 6 12 18 24
但是對于下一個函式,您必須給它一個向量、矩陣、資料框等。因此,我們可以使用 x1 并且它將添加該串列中的所有三個元素。
f_1 <- function(x) {
answer = x[[1]] x[[2]] x[[3]]
return(answer)
}
f_1(x1)
# [1] 6
換句話說,您指的是串列中的特定值。如果我們使用f_1(x1),那么在函式中:
x[[1]] = 1
x[[2]] = 2
x[[3]] = 3
因此,有效的原因f_1(c(5,1,2))是因為您給出了一個長度為 3 的向量,它填充了函式中的所有 3 個位置。但是,如果您運行f_1(c(5,1)),那么您將收到一條錯誤訊息,因為您沒有足夠長的向量來執行該函式。
x[[3]] 中的錯誤:下標越界
如果我想將一個串列中的第一個元素添加到另一個串列中的第二個元素,然后添加另一個串列中的第三個元素,那么我們可以執行以下操作:
f_2 <- function(x1, x2, x3) {
answer = x1[[1]] x2[[2]] x3[[3]]
return(answer)
}
f_2(x1, x2, x3)
# [1] 14
因此,在本例中,我們從 3 個不同的串列(即x1、x2、x3)中提取 3 個數字。
x1[[1]] = 1
x2[[2]] = 4
x3[[3]] = 9
uj5u.com熱心網友回復:
您的問題已經有了答案,但在這里我將從不同的角度提供一個答案。
在 R 中,物件可以包含多個值。您可以使用創建向量
x <- c(1, 4, 9)
它包含 3 個值。您可以使用類似的語法訪問這些值x[3](這將為您提供值 9)。你也可以使用x[[3]]; 對于像 這樣的簡單向量x,您會得到相同的結果。
物件也可以更復雜。創建這些復雜物件的常用方法是使用list,例如
mylist <- list(x = c(1, 4, 9), y = c(4, 5, 6))
現在mylist[[2]]會給你向量c(4, 5, 6)。(您也可以使用mylist[2]略有不同的結果,但初學者的一個好習慣是將其[[用于串列和[向量。)
R 還包含函式。有像c()andlist()和mean()和這樣的內置函式,以及像你的my_function(). 當我在后面用括號寫它們時,這只是一個約定,表明我在談論一個函式;實際的名稱是c,list,mean,和my_function。
當您在代碼中實際使用括號時,它們表示您要呼叫該函式,即將值與其每個引數相關聯,并評估其主體以執行一些計算并回傳一些值。
最后,要回答您的問題,首先要說的是“我見過使用 () 定義輸入引數的函式和使用 [ ] 定義輸入引數的其他函式。” 我會描述你所看到的不同。
當函式呼叫看起來像 時my_function(5,1,2),您是在說您的函式有三個引數,并且您想將這三個值 5、1 和 2 與它們相關聯。
當函式呼叫看起來像這樣my_function(c(5,1,2))并且您使用x[[1]],x[[2]]等參考值時,您是說您的函式有一個引數,但它是一個包含多個值的復雜物件。
什么時候一個比另一個好?這完全取決于背景關系。如果這 3 個值始終是單個概念物件的一部分,那么將它們作為單個 R 物件的一部分是有意義的。一個例子是處理 3D 中的點:它們具有 x、y 和 z 坐標,這些都是描述點的一部分。
如果它們恰好是 3 個不相關但計算所需的東西,那么將它們放入單個物件中是沒有意義的,事實上,將它們放入一個串列中只是為了以這種方式呼叫函式效率低下。
我希望這能讓你對 R 有更多的了解。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/401169.html
上一篇:如何鍵入以陣列陣列作為輸入的函式
下一篇:這兩個函式在可靠性上的區別?
