我知道标题有点令人困惑,很抱歉。 首先是一些生成我们需要的数据的代码:
ng-repeat"n[0] in color"
好的,所以,我有一个函数some_function,它将data.frame和vector作为参数:
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)))
我有一个data.frame列表和一个向量列表。所以我想根据它们作为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])
}
所以我决定使用mapply函数:
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 ...
但是,big_results的长度是300,但是,我只预计100。显然,结果不是我所期望的。有谁知道这里发生了什么以及如何解决它?
答案 0 :(得分:1)
我们需要使用Map
r1 <- Map(function(x,y) x[,y], list_of_df, list_of_vector)
length(r1)
#[1] 100
或mapply
与SIMPLIFY = FALSE
r2 <- mapply(function(x,y) x[,y], list_of_df, list_of_vector, SIMPLIFY=FALSE)
length(r2)
#[1] 100
Map
只是mapply
的包装选项SIMPLIFY=FALSE
。当对象维度相同时会发生什么,它简化为mapply
的矩阵,因为默认选项为SIMPLIFY = TRUE
r3 <- mapply(function(x,y) x[,y], list_of_df, list_of_vector)
length(r3)
#[1] 300
length
的{{1}}是其尺寸的乘积,即
matrix