Я знаю, что название немного сбивает с толку, извините за него. Сначала немного кода для генерации данных, которые нам нужны:
ref_variables=LETTERS[1:10]
# Function to generate one dataset
generate_df=function(){
row=100
d0=seq(1:100)
for (i in seq_along(ref_variables)){
dtemp=sample(seq(1:row),row,TRUE)
d0=data.frame(d0,dtemp)
}
d0[,1]=NULL
names(d0)=ref_variables
return(d0)
}
# Generating a list of dataset
list_of_df=lapply(seq(1:100),function (x){
generate_df()
} )
# Générating a list of vectors
df_vector=sample(ref_variables,3,FALSE)
for (i in seq(2,100)){
tmp=sample(ref_variables,3,FALSE)
df_vector=rbind(df_vector,tmp)
}
list_of_vector <- split(df_vector, seq(nrow(df_vector)))
Итак, у меня есть функция some_function, которая принимает data.frame и вектор в качестве аргументов:
#Some function a data.frame and a vector as arguments
some_function=function(a_df,a_vector){
return(a_df[,a_vector])
}
У меня есть список data.frame и список векторов. Итак, я хочу сопоставить data.frame с вектором в соответствии с их положением в качестве аргументов some_function. В частности, хотелось бы побегать:
some_function(list_of_df[[1]],unlist(list_of_vector[[1]]))
some_function(list_of_df[[2]],unlist(list_of_vector[[2]]))
some_function(list_of_df[[3]],unlist(list_of_vector[[3]]))
and so on ...
Поэтому я решил использовать функцию mapply с:
big_results=mapply(some_function,
list_of_df,
list_of_vector)
Но big_results имеет длину 300, хотя я ожидал только 100. И очевидно, что результаты тоже не такие, как я ожидал. Кто-нибудь знает, что здесь происходит и как это исправить?