在lapply中指定X提供的参数

时间:2016-05-13 06:48:33

标签: r lapply

我有一个功能,例如lapply(X, FUN, ...),它带有许多参数,其中一些参数具有默认值。我想使用X调用此函数,但明确指定我希望X提供哪个参数。在上面的示例中,可以为a中的bcxyz...提供lapply(1:5, fun, a = 4)向量。

通常我可以调用1:5,我想它会使用b作为b参数。

  • 有没有办法让它更明确?
  • 如果我想使用1:5的默认参数并将c用于1:5该怎么办?
  • 如果我想在xyz中使用...作为<subsystem xmlns="urn:jboss:domain:datasources:1.0"> <datasources> <datasource jta="false" jndi-name="java:jboss/postgresDS" pool-name="postgresDS" enabled="true" use-ccm="false"> <connection-url>jdbc:postgresql://localhost:5432/testdb</connection-url> <driver-class>org.postgresql.Driver</driver-class> <driver>postgresql-9.4.1208.jre7.jar</driver> <security> <user-name>postgres</user-name> <password>test</password> </security> <validation> <validate-on-match>false</validate-on-match> <background-validation>false</background-validation> <background-validation-millis>0</background-validation-millis> </validation> <statement> <prepared-statement-cache-size>0</prepared-statement-cache-size> <share-prepared-statements>false</share-prepared-statements> </statement> </datasource> <drivers> <driver name="postgresql-9.4.1208.jre7.jar" module="org.postgresql"> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> </driver> </drivers> </datasources> </subsystem> 参数怎么办?

2 个答案:

答案 0 :(得分:4)

  

通常情况下,我可以调用<form> First Name: <input type="text" name="firstname"> <br> <br>Last Name: <input type="text" name="lastname"> <br> <br>Country: <select> <option value="Singapore">Singapore</option> </select> </form>,我想它会使用1:5作为b参数。

是的,你的想象力是正确的。 lapply(1:5, fun, a = 4)使用位置匹配将其lapply参数传递给函数。正常rules of argument matching适用,这意味着命名参数的精确匹配优先。

另一种选择当然是将X包装在匿名函数中:

fun

答案 1 :(得分:2)

处理用例的一种方法是简单地在lapply向您公开的自定义函数中调用您自己的函数:

lst <- list(v1=c(1:3), v2="Hello", v3=5)

result <- lapply(lst, function(x) {
                         y <- FUN(x, a, b, c, ...)   # Here FUN() is your own function
                         return(y)
                      })