我想这样做:
例如,我有一个data.table as:
dt <- data.table(a=1:3, b=5:7, c=10:8)
# a b c
#1: 1 5 10
#2: 2 6 9
#3: 3 7 8
我希望每次将一行的环境传递给一个函数,例如:
f <- function(a,b,c){
x <- a*b
y <- a*c
z <- a/b
return( x + y + z)
}
我知道我可以在这种情况下使用mapply
来解决这个多变量函数,但在我真正的需要中我有一个函数可以操作几乎 150变量的data.table,并且我不想一个一个地分配变量的名字。我也尝试了一些.SD
操纵,但它也没有用。
我希望我传递data.table行的数量,并在函数内部获取对象 a , b 和 c 在data.table环境中。
类似的东西:
f <- function(row_id){
# set function parent env as data.table[row_id]
# and *a = data.table[row_id, a]* and successively to b and c...
x <- a*b
y <- a*c
z <- a/b
return( x + y + z)
}
答案 0 :(得分:1)
一种方法是调整函数以接收给定的data.table
和一行并输出x + y + z
:
f <- function(dataTable,row_id){
a <- dataTable[row_id,a]
b <- dataTable[row_id,b]
c <- dataTable[row_id,c]
x <- a*b
y <- a*c
z <- a/b
return( x + y + z)
}
如果您输入f(dt)
,它会为您提供x+y+z
个值,或者如果您给它f(dt,1)
,它将仅返回第一行的值。
修改强> 假设您的列名是要分配的变量名,可以尝试这样:
f <- function(dataTable,row_id){
for(i in colnames(dataTable)){
assign(paste(i,"",sep=""), dataTable[row_id,..i])
}
x <- a*b
y <- a*c
z <- a/b
return( x + y + z)
}