使用 eval 我用變數制作不同的東西。這是一個簡單地a回傳變數而不進行任何轉換的示例:
df <- data.frame(1:10); var_name <- "a"
names(df) <- var_name
eval(parse(text= var_name), envir= df)
[1] 1 2 3 4 5 6 7 8 9 10
這按預期作業。但是,如果我將列名稱為數字,例如3,這不會回傳預期的向量1:10:
df <- data.frame(1:10); var_name <- "3"
names(df) <- var_name
eval(parse(text= var_name), envir= df)
[1] 3
我知道在第一個示例中我得到了預期的輸出,因為與在全域環境eval(...)中保存a為變數然后呼叫它相同,即a <- df$a; a. 另一方面,第二個示例與輸入3回傳的示例相同[1] 3。有沒有辦法清楚地表明,即使是數字,我們也想eval(...)在引數中查找變數名envir?
我想出的只是 eval(parse(text= "`3`"), envir= df) 但我需要一個解決方案,我可以在其中提供帶有 vector 的變數名稱var_name。
uj5u.com熱心網友回復:
這里有幾個選項。你可以包裹var_name在as.symbol
df <- data.frame(1:10); var_name <- "3"
names(df) <- var_name
eval(as.symbol(var_name), envir = df)
#> [1] 1 2 3 4 5 6 7 8 9 10
或者,可能更簡單,您可以get改用:
df <- data.frame(1:10); var_name <- "3"
names(df) <- var_name
get(var_name, envir = as.environment(df))
#> [1] 1 2 3 4 5 6 7 8 9 10
請注意,盡管將字串作為要決議為代碼的物件傳遞通常是不好的做法,無論您使用get還是eval- 請參閱此處,原因有幾個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/452157.html
