我正在尋找一個函數,它將一個向量作爲輸入,用向量做一些簡單的算術運算,然後調用新的向量,它由一個字符串組成(比如說「log」)。 )加上原始的矢量名稱。函數中的動態變量名R
d = c(1 2, 3)
my.function <- function { x
x2 <- log(x)
...
我想回到一個名爲log.d向量函數(即不log.x什麼設置,但一些依賴於輸入向量爲x的名稱)。
我正在尋找一個函數,它將一個向量作爲輸入,用向量做一些簡單的算術運算,然後調用新的向量,它由一個字符串組成(比如說「log」)。 )加上原始的矢量名稱。函數中的動態變量名R
d = c(1 2, 3)
my.function <- function { x
x2 <- log(x)
...
我想回到一個名爲log.d向量函數(即不log.x什麼設置,但一些依賴於輸入向量爲x的名稱)。
你可以嘗試下一個:
d = c(1, 2, 3)
my.function <- function(x){
x2 <- log(x)
arg_name <- deparse(substitute(x)) # Get argument name
var_name <- paste("log", arg_name, sep="_") # Construct the name
assign(var_name, x2, env=.GlobalEnv) # Assign values to variable
# variable will be created in .GlobalEnv
}
非常感謝。奇蹟般有效! – pApaAPPApapapa
@pApaAPPApapapa,但要小心......'my.function(my.function(d))'不會像你所希望的那樣返回'log.log.d'。這個函數本身並沒有很好的發揮,更不用說像lapply這樣的其他函數了。 – Miff
這樣做的一種方法是單獨存儲所有輸入向量名稱的名稱,然後將它們傳遞給assign
函數。與assign
一樣,輸出對象名稱爲文本字符串,get
從字符串中查找對象。
我會假設你的向量都遵循常見的模式,並從「d」開始,使它儘可能動態。
d1 <- c(1,2,3)
d2 <- c(2,3,4)
vec_names <- ls(pattern = "^d")
log_vec <- function(x){
log(x)
}
sapply(vec_names, function(x) assign(paste0("log.", x), log_vec(get(x)), envir = globalenv()))
這應該創建兩個新對象「log.d1」和「log.d2」。
不要這樣做。正確的方法是'log.d < - yourfunction(d)'。像你想要的副作用是邪惡的,沒有必要。 – Roland