[英]increment multiple arguments in lapply
有沒有辦法在 lapply function 中增加兩個 arguments? 例如
test <- function(pos,value){
list[pos,value]
}
data=c(1,4,32,54) #not global
lapply(X=1:length(data),test, value=data[X])#this is the idea but the code doesnt work
output 將是list(list(1,1),list(2,4),list(3,32),list(4,54))
另一個例子是
test <- function(pos,value,value2){
list(pos,value,value2)
}
data=c(1,4,32,54) #not global
data2=c(2,6,3,21) #not global
lapply(X=1:length(data),test, value=data[X], value2=data2[X]) #this is the idea but the code doesn't work
output 將是list(list(1,1,2),list(2,4,2),list(3,32,6),list(4,54,21))
這也可能有所幫助。 我非常想將 for 循環更改為 lapply。
test <- function(pos,value,value2){
list(pos,value,value2)
}
data=c(1,4,32,54) #not global
data2=c(2,6,3,21) #not global
for(i:length(data)){
result=list(result,test(i,data[i],data2[i]))
}
由於變量不是全局變量,我無法將測試 function 作為
test <- function(pos){
list(pos,data[pos],data2[pos])
}
我知道有一種更簡單的方法可以編寫此代碼來完成同樣的事情。 但我正在尋找一種方法來專門增加兩個變量,或者在參數中使用增加的值。 示例中使用的變量不是全局變量,所以我不能在 function 中使用它們,它需要使用 lapply function。 在代碼中,lapply 行不起作用,它只是展示了我正在嘗試做的事情的概念。 謝謝你。
所以在了解了mapply function之后。 我意識到我想要的是創建一個像 mapply 一樣的 lapply function
使用“<-”賦值運算符:
num_vec <- c(1, 4, 32, 54)
num_vec2 <- c(2, 6, 3, 21)
# Using lapply:
lapply(seq_along(num_vec), function(x){return(c(x, num_vec[x], num_vec2[x]))})
使用“=”賦值運算符:
num_vec = c(1, 4, 32, 54)
num_vec2 = c(2, 6, 3, 21)
# Using lapply:
lapply(seq_along(num_vec), function(x){return(c(x, num_vec[x], num_vec2[x]))})
在上述情況下,賦值運算符沒有任何區別,並且與局部或全局賦值無關。
響應有關希望根據任一向量中的值檢索元素的附加查詢:
num_vec = c(1, 4, 32, 54)
num_vec2 = c(2, 6, 3, 21)
test <- function(num_vec, num_vec2, val) {
if (!hasArg(val)) {
val <- 1:max(c(num_vec, num_vec2))
} else{
as.numeric(c(val))
}
lapply(seq_along(num_vec),
function(x) {
return(c(x, num_vec[x], num_vec2[x]))
})[ifelse(
val %in% num_vec &
!(val %in% num_vec2),
which(num_vec %in% val),
ifelse(
!(val %in% num_vec2) &
!(val %in% num_vec2),
0,
ifelse(
val %in% num_vec &
val %in% num_vec2,
c(which.min(
which(val %in% num_vec), which(val %in% num_vec2)
),
which.max(
which(val %in% num_vec), which(val %in% num_vec2)
)),
which(val %in% num_vec2)
)
)
)]
}
test(num_vec, num_vec2, 54)
我猜在你的情況下, mapply
是比lapply
更好的選擇。
假設您有可變數量的輸入 arguments,您可以將test
重寫為
test <- function(pos,...){
list(pos, ...)
}
在您的示例中輸入
data=c(1,4,32,54) #not global
data2=c(2,6,3,21) #not global
使用mapply
可以讓你到達那里:
mapply(test, seq_along(data), data, data2, SIMPLIFY = F)
只需添加@hello_friend 的答案,您就可以使用 lapply 將 arguments 傳遞給 function。 從問題中,我了解到您想將多個參數傳遞給 function。 下面的代碼試圖做到這一點。 請看一看。
vec1 <- c(1, 3, 5, 7)
vec2 <- c(2, 4, 6, 8)
test <- function(pos, vec_arg1, vec_arg2){
return(c(pos, vec_arg1[pos], vec_arg2[pos]))
}
# Using lapply:
lapply(seq_along(num_vec), test, vec1, vec2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.