[英]How to rename dataframe in R?
假設我有兩個數據框, dm
和suppdm
test <- function(inds) {
a1 <- inds
a2 <- paste("supp", a1, sep = '')
print(class(a1))
print(class(a2))
}
test(dm)
此時a1
是dm
數據框,但a2
不是suppdm
,只是字符。 如何輸入一個參數並使用兩個數據框? 這是否屬於數據框的重命名?
PS:R function 好像很難傳參。
您必須使用assign
創建一個名稱為字符串的 object,然后使用get
獲取該字符串給出的 object。
請注意,前綴為"supp"
的名稱將僅存在於 function 中,並在退出時被丟棄。
test <- function(inds){
a1 <- deparse(substitute(inds))
a2 <- paste0("supp", a1)
assign(a2, inds)
out_df <- get(a2)
print(class(a1))
print(class(a2))
print(class(out_df))
out_df
}
head(test(iris))
#> [1] "character"
#> [1] "character"
#> [1] "data.frame"
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3.0 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5.0 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
由reprex package (v2.0.1) 創建於 2022-03-23
一個可能有趣的替代方法是使用gdata
package 中可用的mv
function:
library("gdata")
dfA <- data.frame(colA = c(1,2), colB = c(3,4))
ls()
# [1] "dfA"
# to: argument takes any string so conveniently it can be used
# with usual string manipulation functions
mv(from = "dfA", to = paste0("df", "B"))
ls()
# "dfB"
關於您的觀察:
PS: R function 好像很難傳參
這取決於個人的觀點,R 可能被認為更容易或更具挑戰性,具體取決於開發人員的背景、經驗水平等。我認為這是一個更長的對話主題。
mv
在gdata
中提供,使用assign
,類似於@Rui Barradas提供的有效答案,另外還提供了一些其他用於參數檢查和可選目標環境的小工具。 依賴這個 package 來完成這個次要任務是否有意義主要取決於處理依賴關系的品味/方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.