簡體   English   中英

通過lapply循環將自定義函數應用於R中的數據幀列表

[英]Apply custom functions to list of dataframes in R with lapply loop

我試圖通過3個自定義函數循環顯示df元素列表。 當我手動運行每個df但應用lapply失敗時,它可以工作。 僅供參考:結果應導致“擴展”每個數據集,稍后將用於裁剪圖像文件。 數據txt文件的擴展名為.swc,但僅僅是txt文件。 當我通過函數手動運行數據集時,它將起作用。 然后,我將多個文件導入到列表中,該列表也起作用。 但是,當我嘗試使用lapply通過函數運行每個列表元素時,出現以下錯誤

這是申請lapply的實際嘗試

result<-lapply(df_swc_list, fxn(x))

練習DFS以使用並導入列表

df_swc1 <- data.frame(V1 = c(1,2,3,4), V2 = c(17.2,17.2,18.2,18.2), 
V3=c(105.32,106.01,108.89,109.99), V4=c(3,4,4,6), V5=c(1,2,2,2), 
V6=c(7,7,7,7), V7=c(-1,0,1,2))
df_swc2 <- data.frame(V1 = c(1,2,3,4), V2 = c(17.2,17.2,18.2,18.2), 
V3=c(105.32,106.01,108.89,109.99), V4=c(5,5,4,5), V5=c(1,2,2,2), 
V6=c(7,7,7,7), V7=c(-1,0,1,2))
df_swc_list <- list(df_swc1,df_swc2)
df_swc_list_names<-c("control", "variable")
names(df_swc_list)<-gsub("\\.swc$", "",df_swc_list_names)

pythag.opp.leg<-function(Radius){
Diam<-Radius*2
opposite<-sqrt((Diam^2)/2)
opposite.rounded<-round(opposite)
box<-opposite.rounded/2
return(box)
}

swc.fxn <-function(df1){
box<- round(pythag.opp.leg(df1$Radius))
swc.box<- Map(function(a, b, c, d, e) data.frame(X = a:b, Y = c:d, Z = e), 
            df1$X-box, df1$X+box, df1$Y-box, df1$Y+box, df1$Z)
swc.box2<- purrr::map_df(swc.box, function(x) tidyr::expand(x, X, Y, Z))
return(swc.box2)
} 

swc_process_A<-function(x){
as.data.frame(x)->swc2
swc2[,2:6]->swc3
swc3$V2->swc3$Type
swc3$V3->swc3$X
swc3$V4->swc3$Y
swc3$V5->swc3$Z
swc3$V6->swc3$Radius
swc3[,6:10]->swc4
trunc(swc4$X)->swc4$X
trunc(swc4$Y)->swc4$Y
trunc(swc4$Z)->swc4$Z
swc4->swc5
as.data.frame((swc.fxn(swc5)))->expanded.swc.df2
return(expanded.swc.df2)
}

嘗試應用lapply循環

`result<-lapply(df_swc_list, swc_process_A(x))`

df_swc1的預期結果(列表中的第一個df元素)

str(expanded.swc.df)

data.frame':484磅。 3個變量:

X:整數100100100100100100100100100100 ...

Y:整數-2 -1 0 1 2 3 4 5 6 7 ...

Z:num 1 1 1 1 1 1 1 1 1 1 ...

實際錯誤消息顯示錯誤於

[.data.frame`(swc3,,6:10):已選擇未定義的列

lapply調用應為lapply(df_swc_list, "swc_process_A")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM