R 将函数应用于df1,该函数基于扩展和处理来自df1每行的数据来创建新df
我编写了一个fxn(R 将函数应用于df1,该函数基于扩展和处理来自df1每行的数据来创建新df,r,function,dataframe,subset,R,Function,Dataframe,Subset,我编写了一个fxn(fxn-b),当我手动将它应用到df1的每一行时,它可以正常工作。我想将fxn应用于df1,这样它会自动应用于df1的每一行 每次迭代都应该产生一个新的df,我希望新创建的df通过rbind绑定。当我尝试将fxn-b应用于df1时,它似乎只适用于第一行。错误消息还表明它没有超过df1中的第1行 顺便说一句,Fxn-b还包含另一个Fxn(Fxn-a),尽管我不相信这会影响结果。尽管如此,我将提供这两个方面 fxn-a: pythag.opp.leg<-function(R
fxn-b
),当我手动将它应用到df1
的每一行时,它可以正常工作。我想将fxn应用于df1
,这样它会自动应用于df1的每一行
每次迭代都应该产生一个新的df,我希望新创建的df通过rbind绑定。当我尝试将fxn-b应用于df1时,它似乎只适用于第一行。错误消息还表明它没有超过df1中的第1行
顺便说一句,Fxn-b还包含另一个Fxn(Fxn-a),尽管我不相信这会影响结果。尽管如此,我将提供这两个方面
fxn-a:
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<-pythag.opp.leg(df1$Radius)
box<-round(box)<
xHigh<-df1$X+box
Xlow<-df1$X-box
Yhigh<-df1$Y+box
Ylow<-df1$Y-box
swc.box<- data.frame(X=Xlow:Xhigh, Y=Ylow:Yhigh, Z=df1[1,3])
swc.box2<-expand(swc.box, X, Y, Z)
return(swc.box2)
}
df1<-data.frame(X=c(100,110,120,130), Y=c(90,90,90,90),
Z=c(10,10,15,15),Radius=c(2,2,2,2))
#A tibble: 25 x 3
X Y Z
<int> <int> <dbl>
1 98 88 10
2 98 89 10
3 98 90 10
4 98 91 10
5 98 92 10
6 99 88 10
7 99 89 10
8 99 90 10
9 99 91 10
10 99 92 10
... with 15 more rows
Warning messages:
1: In Xlow:Xhigh :
numerical expression has 4 elements: only the first used
2: In Xlow:Xhigh :
numerical expression has 4 elements: only the first used
3: In Ylow:Yhigh :
numerical expression has 4 elements: only the first used
4: In Ylow:Yhigh :
numerical expression has 4 elements: only the first used
pythag.opp.leg如警告消息中所述swc.fxn
只能处理一个输入
swc.fxn(df1[1, ])
这是可行的,但是如果你通过了所有的行,它就不起作用了。一种方法是使用Map
使其同时适用于多行,并使用lappy
扩展每个数据帧
swc.fxn <-function(df1){
box<-pythag.opp.leg(df1$Radius)
box<-round(box)
Xhigh<-df1$X+box
Xlow<-df1$X-box
Yhigh<-df1$Y+box
Ylow<-df1$Y-box
swc.box<- Map(function(a, b, c, d, e) data.frame(X = a:b, Y = c:d, Z = e),
Xlow, Xhigh, Ylow, Yhigh, df1$Z)
swc.box2<- lapply(swc.box, function(x) tidyr::expand(x, X, Y, Z))
return(swc.box2)
}
swc.fxn(df1)
#[[1]]
# A tibble: 25 x 3
# X Y Z
# <int> <int> <dbl>
# 1 98 88 10
# 2 98 89 10
# 3 98 90 10
# 4 98 91 10
# 5 98 92 10
# 6 99 88 10
# 7 99 89 10
# 8 99 90 10
# 9 99 91 10
#10 99 92 10
# … with 15 more rows
#[[2]]
# A tibble: 25 x 3
# X Y Z
# <int> <int> <dbl>
# 1 108 88 10
# 2 108 89 10
# 3 108 90 10
# 4 108 91 10
# 5 108 92 10
# 6 109 88 10
# 7 109 89 10
# 8 109 90 10
# 9 109 91 10
#10 109 92 10
# … with 15 more rows
#.....
#.....
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)
}