簡體   English   中英

將函數應用於名稱為字符串的所有變量

[英]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)

如果你不希望覆蓋LL2 -覆蓋往往使調試更加困難-然后用Lnew <- lapply(L, as.character)L2new <- replace(L2, ix, lapply(L2[ix], as.character))代替。

您可以使用grepls搜索所有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.

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