[英]apply function to all variables with string in name
假設您有 3 個變量,即
VAR1 = 3
VAR2 = 4
VAR3 = 2
有沒有辦法將名稱中帶有字符串“VAR”的所有變量轉換為字符?
通常人們會嘗試將這些變量分組在一個列表中,但如果沒有,那么我們可以這樣做:
for(nm in ls(pattern = "^VAR")) .GlobalEnv[[nm]] <- as.character(.GlobalEnv[[nm]])
如果您在不是全局環境的環境中擁有這些,請按如下方式進行修改。 函數體的第一行定義了測試數據,為方便起見,下一行將當前環境放在變量e
,之后的行執行轉換。 最后,我們檢查變量已轉換為什么。
f <- function() {
VAR1 <- 1; VAR2 <- 2; VAR3 <- 3 # test data
e <- environment() # current environment
for(nm in ls(pattern = "^VAR")) e[[nm]] <- as.character(e[[nm]])
str(VAR1); str(VAR2); str(VAR3) # check results
}
f()
如果您可以安排將這些放在列表中,那么:
L <- list(VAR1 = 1, VAR2 = 2, VAR3 = 3) # test data
L <- lapply(L, as.character)
或者如果有一些元素不需要處理:
L2 <- list(VAR1 = 1, VAR2 = 2, VAR3 = 3, other = 4) # test data
ix <- grep("^VAR", names(L2))
L2[ix] <- lapply(L2[ix], as.character)
如果你不希望覆蓋L
和L2
-覆蓋往往使調試更加困難-然后用Lnew <- lapply(L, as.character)
和L2new <- replace(L2, ix, lapply(L2[ix], as.character))
代替。
您可以使用grep
和ls
搜索所有VAR
,然后在循環中分配新類型。
VAR1 = 3
VAR2 = 4
VAR3 = 2
tt <- grep("^VAR", ls(), value = TRUE)
for(i in seq(tt)) assign(tt[i], as.character(get(tt[i])))
is.character(VAR1)
[1] TRUE
或更短的循環來自@g-grothendieck 。
for(i in ls(pattern = "^VAR")) assign(i, as.character(get(i)))
您可以使用函數“toString()”將數字類型轉換為字符
VAR1 <- 3
class(VAR1) # numeric
VAR1 <- toString(VAR1)
class(VAR1) # character
L <- data.frame(VAR1 = 1, VAR2 = 2, VAR3 = 4)
str(L)
'data.frame': 1 obs. of 3 variables:
$ VAR1: num 1
$ VAR2: num 2
$ VAR3: num 4
l2<-lapply(L,toString)
str(l2)
List of 3
$ VAR1: chr "1"
$ VAR2: chr "2"
$ VAR3: chr "4"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.