我该如何创建这个字符串?

时间:2016-10-29 04:55:44

标签: r

我的目标是创建一个新变量,该变量与fun(5)的每一行的输出相匹配,但现在fun(1:5)不能提供所需的输出。请告诉我如何创建一个允许我以矢量化方式执行此操作的新函数,因为循环它需要很长时间。

我希望f(1:5)生成一个包含5个元素的向量,每个元素与f(5)给出的对应每行的输出相匹配。

由于

names1 = c("x","y","z")
names2 <- c("hi","hello","bye")
fun <- function(x){paste(names2[which(df[x,names1] == 1)],collapse = " ")}
df <- data.frame(a = c(0,1,2,3,4),x = c(0,0,1,0,1),y = c(0,1,0,0,1),z = c(0,1,0,1,0))
fun(5) = "hi hello"
fun(1:5) = "bye NA NA NA NA NA"

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式使用Vectorize(如果我理解正确的结果):

names1 = c("x","y","z")
names2 <- c("hi","hello","bye")
fun <- function(x){
           paste(names2[which(df[x,names1] == 1)],collapse = " ")
}
df <- data.frame(a = c(0,1,2,3,4),
                 x = c(0,0,1,0,1),
                 y = c(0,1,0,0,1),
                 z = c(0,1,0,1,0))
vfun <- Vectorize(fun)
vfun(5)
## [1] "hi hello"
vfun(1:5)
## [1] ""          "hello bye" "hi"        "bye"       "hi hello" 

这实际上为你的函数提供了一个包装器来处理长度为&gt;的值的向量。 1。