R按行应用也将最后一列作为参数发送

时间:2013-12-05 11:44:00

标签: r dataframe apply

我正在尝试将一个函数应用于数据框的每一行,并且在结果的末尾它也会打印最后一列......

我不确定为什么会这样。

df = data.frame(x = LETTERS[1:10], y = sample(1:5,10, replace = TRUE), z = sample(100:105, 10, replace = TRUE))

testprint = function (x){
  print(x[[1]])
  print(x[[2]])
  print(x[[3]])
}

apply(df, 1, testprint)

结果:

[1] "A"
[1] "2"
[1] "105"
[1] "B"
[1] "1"
[1] "103"
[1] "C"
[1] "5"
[1] "102"
[1] "D"
[1] "1"
[1] "101"
[1] "E"
[1] "3"
[1] "105"
[1] "F"
[1] "1"
[1] "100"
[1] "G"
[1] "3"
[1] "103"
[1] "H"
[1] "2"
[1] "101"
[1] "I"
[1] "3"
[1] "100"
[1] "J"
[1] "1"
[1] "100"
 [1] "105" "103" "102" "101" "105" "100" "103" "101" "100" "100"

2 个答案:

答案 0 :(得分:1)

如果您没有使用apply的返回值,我根本没有理由使用apply。您似乎也没有使用print的返回值,至少在您的示例中是这样。那么为什么不使用for循环和cat

for(i in seq_len(nrow(df)))cat(t(df)[,i], sep="\n")

答案 1 :(得分:0)

来自help("function")

  

如果在没有调用return的情况下到达函数的结尾,则为该值   返回最后一个评估表达式。

您函数的最后一个评估表达式为print(x[[3]])

来自help("print")

  

print打印其参数并以不可见的方式返回它(通过不可见(x))。

并且apply将向量中的返回值组合在一起,并返回并打印(因为您没有指定它)。