R 为每第i行应用函数,并使用列作为参数
如果以前有人问过这个问题,我很抱歉,但我找不到解决我问题的方法。哪种类似于R 为每第i行应用函数,并使用列作为参数,r,apply,R,Apply,如果以前有人问过这个问题,我很抱歉,但我找不到解决我问题的方法。哪种类似于的应用功能适合以下情况 我有一个R函数,它有3个参数(x,y,z)。它基本上是调用一个PostgreSQL函数,该函数需要x,y,z,并检索一个由相应值a,b,c组成的数据帧,类似这样 myfunc <- function(x, y, z){ get.df <- fn$sqldf("SELECT * FROM retrieve_meta_data('$x', '$y', '$z')") # get.df i
的应用功能适合以下情况
我有一个R
函数,它有3个参数(x,y,z)
。它基本上是调用一个PostgreSQL
函数,该函数需要x,y,z
,并检索一个由相应值a,b,c
组成的数据帧,类似这样
myfunc <- function(x, y, z){
get.df <- fn$sqldf("SELECT * FROM retrieve_meta_data('$x', '$y', '$z')")
# get.df is a dataframe consisting of x number of rows and columns a, b, c
# some dataframe manipulation...
return(get.df)
}
我希望在不提供任何虚假数据的情况下,我的理解足够清晰。非常感谢您的指点,谢谢 如果x、y和z是df的前三列,那么这应该可以工作:
apply(df,1,function(params)myfunc(params[1],params[2], params[3]))
apply(df,1,FUN)
获取第一个参数df
,并按行将其传递给FUN(因为第二个参数是1)。因此在函数(params)
中,params是一行df
。因此,params[1]
是该行的第一列,以此类推。如果x、y和z是df的前三列,那么这应该可以工作:
apply(df,1,function(params)myfunc(params[1],params[2], params[3]))
apply(df,1,FUN)
获取第一个参数df
,并按行将其传递给FUN(因为第二个参数是1)。因此在函数(params)
中,params是一行df
。因此,params[1]
是该行的第一列,以此类推。如果您的参数是不同类型的,则此版本将起作用,尽管在这种情况下,它们看起来都是字符或可以被视为字符,因此apply
可以正常工作
sapply(
split(df, 1:nrow(df)),
function(x) do.call(myfunc, x)
)
如果您的参数是不同类型的,则此版本将起作用,不过在本例中,它们看起来都是字符,或者可以被视为字符,因此apply
可以正常工作
sapply(
split(df, 1:nrow(df)),
function(x) do.call(myfunc, x)
)
只需申请1
作为保证金;然后该行作为向量传递给函数,您应该能够处理它。例如:
> apply(iris, 1, function(v) paste(v["Species"], v["Sepal.Width"]))
[1] "setosa 3.5" "setosa 3.0" "setosa 3.2" "setosa 3.1"
...
只需申请1
作为保证金;然后该行作为向量传递给函数,您应该能够处理它。例如:
> apply(iris, 1, function(v) paste(v["Species"], v["Sepal.Width"]))
[1] "setosa 3.5" "setosa 3.0" "setosa 3.2" "setosa 3.1"
...
如果您提供示例数据以便得到与您的情况相匹配的答案,这会很有帮助,但听起来您似乎在寻找mapply
,例如
do.call(mapply, c(myfunc, call.df[c(x.col, y.col, z.col)]))
如果您提供示例数据以便得到与您的情况相匹配的答案,这会很有帮助,但听起来您似乎在寻找mapply
,例如
do.call(mapply, c(myfunc, call.df[c(x.col, y.col, z.col)]))
啊,是的,当然!不同的解决方案很好。干杯!啊,是的,当然!不同的解决方案很好。干杯!