簡體   English   中英

如何根據 function arguments 重命名 R 中的對象?

[英]How to rename objects in R based on function arguments?

假設我有一個 function ,它返回一個基於一些 dataframe 參數的向量。 我想在循環中迭代地使用這個 function,所以我希望它返回的向量具有不同的名稱(否則我將無法區分它們)。 具體來說,返回向量的名稱需要根據某個索引進行更改,我將其作為參數 t 傳遞給 function。 因此,如果我使用參數 t=1 調用 function,它會返回一個名為(例如)“vector1”的向量; 如果我用參數 t=2 調用 function,它會返回一個名為“vector2”的向量,依此類推。 請注意,就這個問題而言,向量的元素是什么並不重要。 它們可以完全相同或完全不同——我只想根據 function 的參數重命名它們。

我是 R 的新手,如果這個問題被問得不恰當,我很抱歉。 以下是我嘗試過的,這顯然是錯誤的,但希望能說明我正在嘗試做的事情。

#this function is passed a dataframe and returns some vector named ["vector" + the argument t] 

indexed_vector <- function(data, t) { 

   # ... code which creates a vector (called "vector") from data...#

   paste0("vector", as.character(t)) <- vector

   return(paste0("vector", as.character(t)))


}

#using the function once 
indexed_vector(data, 10)
#ideally this would return a vector called "vector10"  


#using the function in a loop to create multiple vectors
for(i in 1:10){indexed_vector(data, i))
#ideally this would create a list of vectors where each is called "vectori", 
#i.e. "vector1", "vector2", "vector3"..."vector10"

謝謝!

在 R 中,您不能返回名為 something 的向量。 如果您希望在調用 function 之后只出現一個名為vector_1的向量,而不必將其存儲在任何地方,則需要在 function 中使用assign<<-運算符。 這通常不是一個好主意。

但是,在列表中包含命名向量一個好主意,這可以在根本不使用循環的情況下簡單地完成:

indexed_vector <- function(df, i) setNames(as.list(df[i]), paste0("vector_", i))

df <- data.frame(a = 1:3, b = 4:6, c = 7:9, d = 10:12)

indexed_vector(df, 1:3)
#> $vector_1
#> [1] 1 2 3
#> 
#> $vector_2
#> [1] 4 5 6
#> 
#> $vector_3
#> [1] 7 8 9

reprex package (v0.3.0) 於 2020 年 6 月 11 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM